精华内容
下载资源
问答
  • 阿里云Redis——读写分离摘要:在2018数据库直播大讲堂峰会-Redis专场上,阿里云的Redis开发者午光对Redis读写分离进行了介绍。对Redis读写分离可以解决哪些问题,可以应用在哪些场景中,满足业务的哪种需求分别进行...

    阿里云Redis——读写分离

    摘要:在2018数据库直播大讲堂峰会-Redis专场上,阿里云的Redis开发者午光对Redis读写分离进行了介绍。对Redis读写分离可以解决哪些问题,可以应用在哪些场景中,满足业务的哪种需求分别进行了讲解。

    直播视频:https://yq.aliyun.com/video/play/1312

    ...

    文章

    smile小太阳

    2018-01-27

    4162浏览量

    搭建 Redis 的主从

    主从概念

    ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构

    master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1

    通过主从配置可以实现读写分离

    master和slave都是一个redis...

    文章

    skysparrow

    2018-07-13

    1442浏览量

    阿里云数据库全新功能Redis读写分离,全维度技术解析

    阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统https://yq.aliyun.com/articles/277885

    文末有彩蛋,请务必记得看完整哦

    背景

    目前的阿里云redis不管主从版还是集群规格,slave作为备库不对外提供服务,只有在发生HA,slave提升为master后...

    文章

    静辉

    2017-11-30

    6338浏览量

    万券齐发助力企业上云,爆款产品低至2.2折起!

    限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

    广告

    redis架构演变与redis-cluster群集读写方案

    redis架构演变与redis-cluster群集读写方案

    导言

    redis-cluster是近年来redis架构不断改进中的相对较好的redis高可用方案。本文涉及到近年来redis多实例架构的演变过程,包括普通主从架构(Master、slave可进行写读分离)、哨兵模式下的主从架构、redis...

    文章

    调皮仔3683

    2018-08-16

    29765浏览量

    [Docker应用系列·1] 浅析Jedis Pool

    本文环境:jedis 2.1.0

    redis 2.8.13

    Redis无响应

    我们的各个子系统均使用Jedis作为Redis的Java Client读写数据。

    Jedis底层使用Apache的Common Pool,每个Jedis对象在底层都视为一个Object。

    当释放连接失败后,我们的做法只是...

    文章

    六翁

    2017-01-04

    1659浏览量

    windows下Redis 主从读写分离部署

    原文:windows下Redis 主从读写分离部署

    1.可直接下载window下的运行文件(下面这个链接)

    也可以浏览github 查看相应的版本说明文档 https://github.com/ServiceStack/redis-windows

    https://github.com/Servic...

    文章

    杰克.陈

    2018-09-29

    839浏览量

    阿里云rds并发性能解读-大分区表高并发性能提升100倍?

    阿里云某客户发现自己使用读写分离实例,master的cpu特别高,而读写分离中承担读流量的slave节点却相对空闲。用户CPU打满后,访问到主节点的的线上服务受到了较大影响。关于阿里云RDS请参考云数据库RDS详情链接。

    Redis读写分离实例的原理是:key统一写入到master,然后通过主从复...

    文章

    chensuns

    2020-10-19

    241浏览量

    利用阿里云搭建WordPress网站 – 数据库缓存和管理

    WordPress是一种非常流行的博客网站平台,也可以当作一个内容管理系统(CMS)来使用, 是世界上使用最广泛的博客系统之一。WordPress有非常多优秀的插件,使得这个开源产品变得非常容易扩展,满足不同的需求。我准备利用一个系列的文章,来展示如果利用阿里云的各种产品(弹性计算,数据库,安全等...

    文章

    上云小马达

    2019-06-24

    3646浏览量

    跬步千里 —— 阿里云Redis bitfield命令加速记

    1. 问题

    阿里云某客户发现自己使用读写分离实例,master的cpu特别高,而读写分离中承担读流量的slave节点却相对空闲。用户CPU打满后,访问到主节点的的线上服务受到了较大影响。

    1.1 读写分离原理

    Redis读写分离实例的原理是:key统一写入到master,然后通过主从复制同步到sl...

    文章

    skin778

    2020-04-28

    590浏览量

    这可能是史上最全 Redis 高可用解决方案总结

    本文主要针对 Redis 常见的几种使用方式及其优缺点展开分析。一、常见使用方式

    Redis 的几种常见使用方式包括:

    1. Redis 单副本;2. Redis 多副本(主从);3. Redis Sentinel(哨兵);4. Redis Cluster;

    5. Redis 自研。

    二、各种使用...

    文章

    技术小能手

    2018-09-29

    2610浏览量

    MySQL小型高可用架构(组合)

    一、MySQL

    MySQL小型高可用架构

    方案:MySQL双主、主从 + Keepalived主从自动切换

    服务器资源:两台PC Server

    优点:架构简单,节省资源

    缺点:无法线性扩展,主从失败之后需要手动恢复主从架构

    MySQL中型高可用架构

    方案...

    文章

    白及88

    2016-02-24

    4721浏览量

    王义成:阿里云Redis服务助力游戏行业发展

    2018数据库直播大讲堂峰会Redis专场,来自阿里云高级产品专家王义成带来Redis助力游戏行业的相关演讲。主要从传统数据库的压力开始谈起,着重介绍了阿里云Redis产品架构以及不同的版本,接着对Redis服务能力进行了说明,最后对游戏、视频行业的应用作了介绍。直播视频:https://yq.a...

    文章

    云迹九州

    2018-01-27

    2791浏览量

    这可能是史上最全 Redis 高可用解决方案总结

    本文主要针对 Redis 常见的几种使用方式及其优缺点展开分析。

    一、常见使用方式

    Redis 的几种常见使用方式包括:

    Redis 单副本;

    Redis 多副本(主从);

    Redis Sentinel(哨兵);

    Redis Cluster;

    Redis 自研。

    二、各种使用方式的...

    文章

    java填坑路

    2018-09-30

    1361浏览量

    redis主从配置及主从切换 .

    环境描述:

    主redis:192.168.10.1 6379

    从redis:192.168.10.2 6380

    一、主从配置

    1、将主从redis配置文件redis.conf中的aemonize no 改为 yes

    2、修改从redis配置文件redis.conf中的port 6379 改...

    文章

    余二五

    2017-11-15

    967浏览量

    亿级流量电商系统多级缓存架构

    亿级流量电商系统多级缓存架构

    Redis基础

    数据类型String hash list set zset

    java操作Redis

    redis的RDB和AOF两种持久化机制

    Redis Transcation

    Redis高级

    redis企业级数据备份

    Lua脚本与redis抢红包实战案例...

    文章

    优惠券发放

    2018-08-22

    3372浏览量

    【干货合集】NoSQL技术体系深度解读系列(一):Redis,从技术原理到最佳实践

    2018年开年知识盛会——NoSQL数据库直播大讲堂峰会,将于1月19日、23日、25日与大家见面,阿里云Redis、MongoDB、HBase的15位技术专家、产品专家将给大家带来深度的技术及产品分享。本次峰会的主要板块包括1月17日的北京产品发布会、1月19日、23日、25日的系列直播技术大讲...

    文章

    场景研读

    2018-01-08

    12701浏览量

    这可能是目前最全的Redis高可用技术解决方案总结

    本文主要针对Redis常见的几种使用方式及其优缺点展开分析。

    一、常见使用方式

    Redis的几种常见使用方式包括:

    • Redis单副本;• Redis多副本(主从);• Redis Sentinel(哨兵);• Redis Cluster;• Redis自研。

    二、各种使用方式的优缺点

    1、Re...

    文章

    技术小能手

    2018-08-21

    17562浏览量

    Redis的复制流程

    归纳几点

    redis复制缺陷

    主动复制

    通过presharding进行Redis在线扩容

    内存规划,避免向在线服务的压力较大的主库上增加从库

    新的持久化方案

    redis的数据类型

    Redis与MySQL的结合,开发了自己的MySQL复制工具,可以方便的实时同步MySQL中的数据到Redis上

    re...

    文章

    技术小阿哥

    2017-11-27

    1240浏览量

    史上最全Redis高可用技术解决方案大全

    继采访 “对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践” 发出后,很多朋友向我咨询关于里面提到的高可用的方案的优缺点以及如何选择合适的方案线上使用,刚好最近在给宜人贷,光大银行做企业内训的时候也详细讲过(广告一下:极数云舟不仅提供企业培训、技术咨询、解决方案,还有项目产品...

    文章

    技术小能手

    2018-11-16

    1676浏览量

    阿里云Redis账号

    阿里云Redis的账号系统允许用户对同一个实例创建多个账号,并赋予不同账号相同或者不同的权限。这给用户带来更灵活的实例管理,不同的模块可以使用不同的账号,最大限度的避免误操作。

    目前只有4.0主从规格支持账号系统,集群规格的账号系统将在十月份支持。

    下面是阿里云Redis账号系统的使用教程。

    创建...

    文章

    午光

    2018-09-28

    3224浏览量

    Redis复制与可扩展集群搭建

    Redis复制流程概述

    Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你的系统内存容量规划,原因可以参考我上一篇文章中提到的Redis磁盘IO问题。

    R...

    文章

    cnbird

    2013-03-13

    709浏览量

    redis的主从配置 扩容

    由于redis的集群功能没有完全编写好,见:http://redis.io/topics/cluster-spec

    集群只有测试版的第8个版本redis3.0.0 见 http://redis.io/download

    但是redis可以做主从设置

    Redis的主从复制策略是通过其持久化的rdb...

    文章

    老先生二号

    2017-06-25

    1572浏览量

    redis 4.0.2主从

    192.168.3.1-主

    192.168.3.2-从

    修改主从配置文件的/usr/local/redis/redis.conf

    bind 0.0.0.0——修改侦听在任意网卡;默认侦听在127.0.0.1;不修改主从无法相互访问redis

    port 6379 ——如果在一台机器上,主从的端口侦听...

    文章

    余二五

    2017-11-15

    746浏览量

    redis 4.0.2主从

    192.168.3.1-主

    192.168.3.2-从

    修改主从配置文件的/usr/local/redis/redis.conf

    bind 0.0.0.0——修改侦听在任意网卡;默认侦听在127.0.0.1;不修改主从无法相互访问redis

    port 6379 ——如果在一台机器上,主从的端口侦听...

    文章

    余二五

    2017-11-15

    621浏览量

    Redis Cluster 高可用方案

    一、Redis Cluster

    Cluster介绍

    Redis 集群采用无中心的方式,为了维护集群状态统一,节点之间需要互相交换消息。Redis采用交换消息的方式被称为 Gossip ,基本思想是节点之间互相交换信息最终所有节点达到一致,更多关于 Gossip 可参考 https://en.w...

    文章

    alex懂个蛋

    2016-10-11

    10512浏览量

    Redis详解(八)------ 主从复制

    前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大的问题,通常会采取的一种方式是主从...

    文章

    ysocean

    2018-06-10

    1083浏览量

    redis的主从复制 读写分离 主从切换

    当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。

    redis提供了一个master,多个slave的服务。

    准备三个redis服务,依次命名文件夹子master,slave1,sl...

    文章

    余二五

    2017-11-15

    1010浏览量

    Redis主从复制基本配置

    实现Redis的主从复制配置比较简单,而且容易明白。

    下图是要配置的主从复制结构图:

    1.说明

    Redis主从复制中一个主服务可以有多个从服务,一个从服务可以有多个从服务。

    配置比较简单,只需要更改redis.conf文件中的slaveof参数配置即可。

    ...

    文章

    技术小阿哥

    2017-11-14

    974浏览量

    REDIS主从配置及切换

    最近公司项目也用上了。但有个点没有弄很明白。

    requirepass只是给CLIENT认证用的,还是同时给从REDIS认证用的?(masterauth)

    一般的思路是主服务器不开AOF,从服务器打开AOF,以便有更高的主服务器性能。

    网上相关文档如下:

    环境描述:

    主redis:192.168.1...

    文章

    天飞

    2016-05-16

    4246浏览量

    Redis主从复制与优化

    Redis主从复制与优化

    主从复制

    我们关注主从复制之前,首先要考虑单机有什么问题?

    机器故障

    容量瓶颈

    QPS瓶颈

    这些都是单节点所遇到的问题,所以这个时候出现了主从复制(一主一从,一主多从)

    使用主从复制可以:

    数据副本

    扩展读性能

    注意:

    一个master可以有多个slave

    ...

    文章

    浪人与酒

    2020-10-13

    511浏览量

    展开全文
  • 目的:为了spring上下文添加读写分离的接口,可以在启动后自动注入redis只读接口或可读写接口1. 定义一个相关的functional interface - 在spring boot的启动类里面要用到(@EnableDynamicKeyValueServiceCreation)@...

    目的:为了spring上下文添加读写分离的接口,可以在启动后自动注入redis只读接口或可读写接口

    1. 定义一个相关的functional interface - 在spring boot的启动类里面要用到(@EnableDynamicKeyValueServiceCreation)

    @Retention(value = RetentionPolicy.RUNTIME)

    @Import(KeyValueServiceRegister.class)

    public @interface EnableDynamicKeyValueServiceCreation {

    }

    2. 定义只读接口和可读写接口

    public interface KeyValueReadService { String get(String key); ...}

    public interface KeyValueReadWriteService extends KeyValueReadService { void set(String key, String value); ..}

    3. 实现类

    public class RedisConfigInfo {

    private String hostName;

    private int port;

    private String password;

    private JedisPoolConfig poolConfig;

    }

    public abstract class AbstractRedisOperation {

    private final JedisPool jedisPool;

    public AbstractRedisOperation (RedisConfigInfo info) { jedisPool = ...;}

    }

    public class RedisReadServiceImpl extends AbstractRedisOperation implements KeyValueReadService {

    public RedisReadServiceImpl(RedisConfigInfo temp) {

    super(temp);

    }

    @Override

    public String get(String key) {

    return stringValueOps.get(key);

    }

    }

    4. 通过spring去获取redis的配置信息

    @Component

    public class KeyValueServiceRegister implements ImportBeanDefinitionRegistrar, EnvironmentAware {

    private static Logger logger = LoggerFactory.getLogger(KeyValueServiceRegister.class);

    private Map beanDefinitionMap = null;

    @Override

    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,

    BeanDefinitionRegistry registry) {

    if (beanDefinitionMap == null || beanDefinitionMap.isEmpty()) {

    logger.warn("beanDefinitions is empty");

    return;

    }

    String beanName;

    BeanDefinition beanDefinition;

    for (Map.Entry entry : beanDefinitionMap.entrySet()) {

    beanName = entry.getKey();

    beanDefinition = entry.getValue();

    registry.registerBeanDefinition(beanName, beanDefinition);

    }

    }

    @SuppressWarnings("rawtypes")

    @Override

    public void setEnvironment(Environment environment) {

    String prefix = environment.getProperty("prefix.keyvalue.cache", "kv.");

    Properties props = new Properties();

    MutablePropertySources propSrcs = ((AbstractEnvironment) environment).getPropertySources();

    StreamSupport.stream(propSrcs.spliterator(), false)

    .filter(ps -> ps instanceof EnumerablePropertySource)

    .map(ps -> ((EnumerablePropertySource) ps).getPropertyNames())

    .flatMap(Arrays::stream).filter(name -> name.startsWith(prefix)).forEach(

    propName -> props.setProperty(propName, environment.getProperty(propName)));

    beanDefinitionMap = Collections

    .unmodifiableMap(KeyValueServiceHelper.buildBeanDefinitionMap(props));

    }

    }

    5. 根据配置信息构建bean

    public class KeyValueServiceHelper {

    private static final String POSFIX_READ = ".r";

    private static final String POSFIX_WRITE = ".w";

    public static final Map buildDataSourceMap(Properties prop) {

    if (prop == null || prop.isEmpty()) {

    return Collections.emptyMap();

    }

    Map result = new HashMap<>();

    Set keys = prop.stringPropertyNames();

    Properties temp;

    String dsName;

    for (String key : keys) {

    dsName = key;

    if (!isKeyValueServiceBeanName(key)) {

    dsName = removePosfix(key);

    }

    temp = result.get(dsName);

    if (temp == null) {

    temp = new Properties();

    result.put(dsName, temp);

    }

    temp.setProperty(key, prop.getProperty(key));

    }

    return result;

    }

    public static final boolean isKeyValueServiceBeanName(String str) {

    if (StringUtils.isBlank(str)) {

    return false;

    }

    return str.endsWith(POSFIX_READ) || str.endsWith(POSFIX_WRITE);

    }

    public static final String removePosfix(String str) {

    if (StringUtils.isBlank(str)) {

    return str;

    }

    int idx = str.lastIndexOf(".");

    if (idx == -1) {

    return str;

    }

    return str.substring(0, idx);

    }

    public static final String resolveBeanClassName(final String beanName,

    final String connectionStr) {

    if (StringUtils.isBlank(beanName)) {

    throw new IllegalArgumentException("bean name is blank");

    }

    if (StringUtils.isBlank(connectionStr)) {

    throw new IllegalArgumentException("connectionStr is blank");

    }

    if (!RedisConnectionHelper.isRedisConnectionString(connectionStr)) {

    throw new IllegalArgumentException("connectionStr is invalid");

    }

    if (beanName.endsWith(POSFIX_READ)) {

    return RedisReadServiceImpl.class.getName();

    }

    if (beanName.endsWith(POSFIX_WRITE)) {

    return RedisReadWriteServiceImpl.class.getName();

    }

    throw new IllegalArgumentException("beanName is invalid,should end with '.r' or '.w'");

    }

    public static final Map buildBeanDefinitionMap(Properties props) {

    Map cacheSources = buildDataSourceMap(props);

    if (cacheSources == null || cacheSources.isEmpty()) {

    return Collections.emptyMap();

    }

    BeanDefinition def;

    String beanName;

    String connectionStr;

    String beanClassName;

    Properties prop;

    RedisConfigInfo info;

    Map beanMap =

    new HashMap(cacheSources.size());

    for (Map.Entry entry : cacheSources.entrySet()) {

    beanName = entry.getKey();

    prop = entry.getValue();

    connectionStr = prop.getProperty(beanName);

    if (!RedisConnectionHelper.isRedisConnectionString(connectionStr)) {

    continue;

    }

    info = RedisConnectionHelper.parseRedisConfigInfo(prop, beanName);

    def = new GenericBeanDefinition();

    beanClassName = KeyValueServiceHelper.resolveBeanClassName(beanName, connectionStr);

    def.setBeanClassName(beanClassName);

    def.getConstructorArgumentValues().addGenericArgumentValue(info);

    beanMap.put(beanName, def);

    }

    return beanMap;

    }

    }

    6. 如何使用

    a. 在SpringBoot的启动类里面加上@EnableDynamicKeyValueServiceCreation

    b. 配置文件里面加上读写分离的redis的配置信息 - 读的是.r结尾,可写的是.w结尾

    c. 在需要只读redis的service里面, 直接注入(@KeyValueReadService (name=**.r)

    d. 在需要读写redis的service里面, 直接注入(@KeyValueReadService (name=**.w)

    展开全文
  • 背景云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才...为满足读多写少的业务场景,最大化节约用户成本,云数据库Redis版推出了读写分离规格...

    背景

    云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才承担读写流量。这种架构读写请求都在master上完成,一致性较高,但性能受到master数量的限制。经常有用户数据较少,但因为流量或者并发太高而不得不升级到更大的集群规格。

    为满足读多写少的业务场景,最大化节约用户成本,云数据库Redis版推出了读写分离规格,为用户提供透明、高可用、高性能、高灵活的读写分离服务。

    架构

    Redis集群模式有redis-proxy、master、replica、HA等几个角色。在读写分离实例中,新增read-only replica角色来承担读流量,replica作为热备不提供服务,架构上保持对现有集群规格的兼容性。redis-proxy按权重将读写请求转发到master或者某个read-only replica上;HA负责监控DB节点的健康状态,异常时发起主从切换或重搭read-only replica,并更新路由。

    一般来说,根据master和read-only replica的数据同步方式,可以分为两种架构:星型复制和链式复制。

    星型复制

    星型复制就是将所有的read-only replica直接和master保持同步,每个read-only replica之间相互独立,任何一个节点异常不影响到其他节点,同时因为复制链比较短,read-only replica上的复制延迟比较小。

    Redis是单进程单线程模型,主从之间的数据复制也在主线程中处理,read-only replica数量越多,数据同步对master的CPU消耗就越严重,集群的写入性能会随着read-only replica的增加而降低。此外,星型架构会让master的出口带宽随着read-only replica的增加而成倍增长。Master上较高的CPU和网络负载会抵消掉星型复制延迟较低的优势,因此,星型复制架构会带来比较严重的扩展问题,整个集群的性能会受限于master。

    链式复制

    链式复制将所有的read-only replica组织成一个复制链,如下图所示,master只需要将数据同步给replica和复制链上的第一个read-only replica。

    链式复制解决了星型复制的扩展问题,理论上可以无限增加read-only replica的数量,随着节点的增加整个集群的性能也可以基本上呈线性增长。

    链式复制的架构下,复制链越长,复制链末端的read-only replica和master之间的同步延迟就越大,考虑到读写分离主要使用在对一致性要求不高的场景下,这个缺点一般可以接受。但是如果复制链中的某个节点异常,会导致下游的所有节点数据都会大幅滞后。更加严重的是这可能带来全量同步,并且全量同步将一直传递到复制链的末端,这会对服务带来一定的影响。为了解决这个问题,读写分离的Redis都使用阿里云优化后的binlog复制版本,最大程度的降低全量同步的概率。

    结合上述的讨论和比较,Redis读写分离选择链式复制的架构。

    Redis读写分离优势

    透明兼容

    读写分离和普通集群规格一样,都使用了redis-proxy做请求转发,多分片令使用存在一定的限制,但从主从升级单分片读写分离,或者从集群升级到多分片的读写分离集群可以做到完全兼容。

    用户和redis-proxy建立连接,redis-proxy会识别出客户端连接发送过来的请求是读还是写,然后按照权重作负载均衡,将请求转发到后端不同的DB节点中,写请求转发给master,读操作转发给read-only replica(master默认也提供读,可以通过权重控制)。

    用户只需要购买读写分离规格的实例,直接使用任何客户端即可直接使用,业务不用做任何修改就可以开始享受读写分离服务带来的巨大性能提升,接入成本几乎为0。

    高可用

    高可用模块(HA)监控所有DB节点的健康状态,为整个实例的可用性保驾护航。master宕机时自动切换到新主。如果某个read-only replica宕机,HA也能及时感知,然后重搭一个新的read-only replica,下线宕机节点。

    除HA之外,redis-proxy也能实时感知每个read-only replica的状态。在某个read-only replica异常期间,redis-proxy会自动降低这个节点的权重,如果发现某个read-only replica连续失败超过一定次数以后,会暂时屏蔽异常节点,直到异常消失以后才会恢复其正常权重。

    redis-proxy和HA一起做到尽量减少业务对后端异常的感知,提高服务可用性。

    高性能

    对于读多写少的业务场景,直接使用集群版本往往不是最合适的方案,现在读写分离提供了更多的选择,业务可以根据场景选择最适合的规格,充分利用每一个read-only replica的资源。

    目前单shard对外售卖1 master + 1/3/5 read-only replica多种规格(如果有更大的需求可以提工单反馈),提供60万QPS和192 MB/s的服务能力,在完全兼容所有命令的情况下突破单机的资源限制。后续将去掉规格限制,让用户根据业务流量随时自由的增加或减少read-only replica数量。

    规格QPS带宽

    1 master

    8-10万读写

    10-48 MB

    1 master + 1 read-only replica

    10万写 + 10万读

    20-64 MB

    1 master + 3 read-only replica

    10万写 + 30万读

    40-128 MB

    1 master + 5 read-only replica

    10万写 + 50万读

    60-192 MB

    后续

    Redis主从异步复制,从read-only replica中可能读到旧的数据,使用读写分离需要业务可以容忍一定程度的数据不一致,后续将会给客户更灵活的配置和更大的自由,比如配置可以容忍的最大延迟时间。

    展开全文
  • Redis主从读写分离前言在Web开发领域,其实网上很多文章都介绍到了,造成并发负载的情况一般不是web服务器自身.......(PS:Nginx表示:我可不背这个锅........让数据库去背)......因此说到底的,并发负载的主要原因还是...

    Redis主从读写分离前言

    在Web开发领域,其实网上很多文章都介绍到了,造成并发负载的情况一般不是web服务器自身.......(PS:Nginx表示:我可不背这个锅........让数据库去背)......因此说到底的,并发负载的主要原因还是在于服务器上的数据库的读写能力,当然,如果是云计算服务器等,可以弹性的扩展CPU和SSD磁盘与内存等以及页面静态化处理方式和缓存处理........等等方式,本文就不再提了~

    本文章主要介绍如何进行Redis的主从配置

    首先第一个问题:何为主从?其实主从就是拥有若干台服务器,一台作为主服务器,另几台作为slave服务器(即:奴隶服务器——从服务器)。

    主服务器负责存入数据的功能,而slave从服务器负责同步主服务器上的数据,并且提供读取数据的功能(注:从服务器一般不提供写入用户数据的功能,写入数据的功能一般由主服务器完成,然后同步给从服务器)。

    如下图所示:

    这时:有朋友可能就会问了.......这样做的好处在于哪里?

    其实这个答案已经很明显了,数据库最常用的是查询数据功能,高并发查询是数据库并发负载的主要原因,增加从服务器用来均衡查询带来的服务器压力,可以保证服务器不会宕机,并且其具有一定的突发情况时的容灾处理,比如服务器断电,物理破坏等导致数据丢失,如果我们是主从形式的数据库服务器,我们还能保证数据多份备份。

    准备工作我们预先做好:(具体redis的安装,可以参考我之前的几篇文章~)

    准备虚拟机两台,配置好ip,安装相同版本的redis数据库客户端及服务端

    且这两台虚拟机之间需要保证互相ping通,处于内网环境

    主服务器IP:192.128.92.131

    从服务器IP:192.128.92.132

    一、首先是从服务器配置

    先进入从服务器里的redis配置项,找到redis.conf文件并打开编辑

    注意:如果你的从服务器中redis先前设置了密码,请把它注释掉!因为会与上边的配置起冲突(如图下图所示)

    如果你找不到有关于 slaveof 配置,请在配置文件中搜索 replicaof

    由于redis 版本不同,导致配置文件将会有小小误差。但是原理配置都是一样的。

    二、开始配置主服务器

    配置好从服务器的内容后,我们打开主服务器的配置项,同理(redis.conf文件)

    redis安装好后默认是没有设置密码的,我们先将主服务器上的redis上配置密码为123456

    如下图所示:主服务器的密码配置

    配置完密码,开始配置开放ip(如下图所示)

    网上有很多朋友喜欢把它配置为:bind 0.0.0.0

    其实做这实验的情况下是可以配置成这样的,项目上线千万别这么用就行了

    此时配置完成,我们还不一定能访问,我们还需要注释一个东西(在主服务器上找到这个配置,并把它注释掉)

    没有注释这个玩意儿,由于配置内容的顺序原因,可能会导致从服务器连接主服务器失败:例如以下的报错

    配置从服务器只读权限(注:需要在主服务器中配置)

    到了这里我们也就大功告成了,我们按顺序重启redis

    先重启主服务器,再重启从服务器

    在从服务器下输入命令(尝试连接主服务器)

    redis-cli -h 192.168.92.131 -p 6379 -a 123456

    参数介绍:-h 为主机地址 -p端口号 -a 主机密码

    看到此时这个场景,恭喜你连接成功了

    此时如果你set一个值,会显示ok,这是因为,你用密码在从服务器上登录了主服务器,所以从服务器也会有写入数据的权限,你只需要exit退出数据库不要输入密码登录就可以了

    如图所示:不用密码登录

    一但登录,我们返回主服务器,在redis客户端界面输入命令:如图所示

    命令:info的功能是返回redis信息,数值信息如下图所示

    当你看到connected_slaves这个参数为1时,代表主从配置成功

    此时你在主服务器下设置一个数据,从服务器便能自动进行同步备份,并且从服务器没有写入权限。

    展开全文
  • Redis是一种NoSQL的文档数据库...下面用一个实例实现redis的读写分离,步骤如下:第一步:下载redis下载最新的稳定版,解压拷贝到 ~/redis 中编译代码:$ make$ test第二步:配置redis编辑redis.conf文件bind 127.0...
  • 准备redis可以做读写分离,不过这个要看应用的客户端是否支持。这里使用Lettuce客户端做了下读写分离验证。首先搭建哨兵模式,可以参考这篇文章 https://blog.csdn.net/u012772064/article/details/94452211哨兵模式...
  • 1、为什么要主从复制(一主多仆),读写分离:redis在作为缓存的时候,随着数据的不断增加,是有可能出现宕机的,这时候就出现了“单点故障”,解决方案就是进行主从复制,读写分离。原理图:Master是主,Slave是从,...
  • 写的请求是比较少的,可能写请求也就一秒钟几千,一两千 大量的请求都是读,一秒钟二十万次读 读写分离:一主多从 主从架构 -> 读写分离 -> 支撑10万+读QPS的架构 redis replication redis主从架构 -> 读写分离架构 ...
  • /*** 初始化切片池*/private static void initialShardedPool() throwsException {long start =System.nanoTime();IRedisBaseSV sv= (IRedisBaseSV) ServiceFactory.getService(IRedisBaseSV.class);...
  • 下面用一个实例实现redis的读写分离,步骤如下: 第一步:下载redis 下载最新的稳定版,解压拷贝到 ~/redis 中 编译代码: $ make $ test 第二步:配置redis 编辑redis.conf文件 bind 127.0.0.1 port 6379 拷贝...
  • 刚说了个redis集群方案,又遇到这个主从复制,读写分离!姑且答之。。。背景:为了避免单点缓存服务器出现宕机,死机等问题,引起整个缓存系统不可用的情况,可以使用多台服务器搭建一个缓存集群,同时因为读写的量有...
  • 对缓存来说,读写分离一般都是用来支撑读高并发的,写的请求是比较少的,也就一秒一两千左右。大量的请求都是读,一秒几十万次。 redis replication 目的 实现redis的主从架构 + 读写分离架构 + 可支持水平扩展的读...
  • 特点: 1、一个master可以有多个slave 2、支持链式复制(一个slave也可以是其他的slave的slave) 3、master以非阻塞方式同步数据至slave(master可以同时处理多个slave的读写请求,slave端在同步数据时也可以使用非阻塞...
  • RedisX什么是redisx?...3、包含redis 读写分离;4、包含redis Sentinel 线程池;5、包含redis Sentinel Salve 线程池;6、新增线程池对spring支持,和spring完美集成;7、包含redis Sentinel Sharded Master Sla...
  • 1. Redis主从同步 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。 2.... 后记 本文介绍了Redis主从同步,读写分离,及HA,后续会继续研究Redis。
  • 配置连接池与读写分类//写节点(主节点)Listwrites=newList();writes.Add("123456abcdef@127.0.0.1:6379");//读节点Listreads=newList();reads.Add("123456abcdef@127.0.0.1:6379");reads.Add("123456abcdef@...
  • spring-data-redis :是对jedis或Lettuce这些客户端的封装,提供一套...本文中主要是通过jedis来实现读写分离。分为两步,1、window环境搭建redis主从服务。2、实现读写分离 一、搭建redis主从服务 1、下载window...
  • springboot+jedis+读写分离+哨兵模式+集群高可用 有demo下载 准备软件: 1. Redis-x64-3.0.502.zip 2. rubyinstaller-2.4.2-2-x64.exe 3. rubygems-2.7.3.zip 4. redis-trib.rb 安装开始: 1. 首先将redis...
  • redis读写分离jedis

    千次阅读 2018-11-09 17:06:54
    redis集群主从之读写分离 1、集群部署 这里就不详细赘述如何部署主从集群了,一般都是使用slaveOf配置来进行初始化配置。 2、与springboot集成实现读写分离 通过注解实现调用层读写分离,然后根据取模运算来确定访问...
  • 大家在工作中可能会遇到这样的需求,即Redis读写分离,目的是为了压力分散化。下面我将为大家介绍借助AWS的ELB实现读写分离,以写主读从为例。 实现 引用库文件 <!-- redis客户端 --> <groupId>redis....
  • Jedis jedis = null; try { jedis = redisSentinelJedisPool.getResource(); System.out.println(jedis.get("key")); } catch (Exception e) { e.printStackTrace(); } finally { redisSentinelJedisPool....

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
热门标签
关键字:

jedis读写分离