首页 > 数据库 >Redis可用性

Redis可用性

时间:2023-11-04 12:33:04浏览次数:44  
标签:主库 同步 buffer 可用性 Redis 命令 offset 服务器

主从模式

读写分离,master处理读写命令,slave仅处理读命令。

image

为什么仅有一个masater能处理读? 这是避免引入加锁、实例间协商是否完成修改等操作。

主从同步方式

通过replicaof {master_ip} 6379去请求RDB文件,同步细节如下。

image

  1. 从库给主库发送 psync 命令,表示要进行数据同步。

    psync 命令包含了主库的 runID 和复制进度 offset 两个参数。runID是Redis 实例启动时自动生成的随机 ID唯一标记,第一次复制时主库 runID未知设为“?”。offset为 -1,表示第一次复制。

  2. 主库通过 FULLRESYNC响应命令,返回主库 runID和主库复制进度offset。从库记录此数据。

  3. 主库启动bgsave命令生成RDB文件并发送给从库,从库清空当前内存数据并加载RDB数据。

  4. 主库发送同步期间replication buffer缓存的写命令给从库,从库回放写命令,完成数据同步。

解决主服务器同步压力

Redis宕机恢复提到过bgsave会增加cpu和内存负载,并会短暂阻塞主进程。可以考虑通过将部分从服务器作为二级从服务器的主服务器,分担全量复制的从服务器压力。

网络断连处理

Redis从服务器会定期发送REPLCONF ACK offset从主服务器拉取数据。但当网络波动时,可能会导致offset落后较多。

主服务器在接受写命令时,会缓存到一个环形缓冲区repl_backlog_buffer中,并更新master offset。接受到从服务器同步slave offset后,会判断repl_backlog_buffer是否还覆盖此位移。若包含则将落后的写命令缓存到replication buffer等待从服务器读取同步;否则,通过bgsave生成RDB走全量同步流程。

1. repl_backlog_buffer
   环形缓冲区,主服务器上的一块缓存,用于记录写命令,同步从服务器的备份缓存。可以根据redis写命令tps/网络IO/从服务器同步时间调整大小。

2. replication buffer
   从服务器等于client,此buffer意义同client buffer,故每个从服务器都有单独的replication buffer。
   数据需要写入replication buffer,再通过socket buffer发送出去,所以主服务器的写命令也会同时写入replication buffer。
   只有当从服务器断连后,便会用到repl_backlog_buffer去捞取丢失的命令。

哨兵模式

待写。

标签:主库,同步,buffer,可用性,Redis,命令,offset,服务器
From: https://www.cnblogs.com/kiper/p/17809060.html

相关文章

  • Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!
    中午时候,在技术交流群里聊起关于Redis创始人的一些趣事,比如离开Redis之后,去写科幻小说之类的。因为好奇科幻小说,TJ君就去搜索了一下。结果一搜,发现Redis作者最近居然又搞了个新活儿!世界上最小的聊天服务器这次Redis作者的新开源项目名叫:SmallChat。从关于内容中可以知道,这个开......
  • java——redis随笔——实战——分布式缓存
    在使用Redis过程中,持久化是一项非常重要的功能,因为如果RedisServer停止工作,所有的数据将全部丢失。 为了避免这种情况的出现,我们需要将Redis中的数据保存在硬盘上,以保证数据不受服务器宕机影响。 Redis提供了两种持久化方式——RDB和AOF。    笔者将会以RDB与AOF......
  • Redis监控方法之二
    Redis监控方法之二背景前期整理过使用exporter+prometheus方式进行Redis监控的搭建过程最近给同事研究clickhouse时发现clickhouse有对应的plugin可以直接拉取CK的信息当时就想其他的中间件肯定有类似的方法进行处理.当时第一反应是想学习使用Oracle,SQLSERVER的pl......
  • redis实现优惠券秒杀
    (优惠券秒杀)本文为学习redis时做的笔记,学习内容来自黑马程序员Redis入门到实战教程,该教程是循序渐进的,所以不是一上来就讲完最后的解决方案了,请耐心看完所需要的分布式锁知识请看我的下一篇博客1.全局id生成器全局id生成器是一种分布式系统下的全局唯一id生成工具不管有多......
  • Redis的Java客户端
     Redis的Java客户端很多,常用的几种:JedisLettuceSpringDataRedisSpring对Redis客户端进行了整合,提供了SpringDataRedis,在SpringBoot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。......
  • Redis 技术整理
    认识RedisRedis官网:https://redis.io/Redis诞生于2009年全称是RemoteDictionaryServer远程词典服务器,是一个基于内存的键值型NoSQL数据库特征:键值(key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具备原子性低延迟,速度快(基于内存.IO多路复用.良好的编码)支......
  • redis知识点
    redis知识点场景类缓存缓存穿透定义:大量查询业务不存在的key击穿redis,直接查询数据库.解决方案:valuenull实施:来一个这样的key,写入到缓存中,将其值设置为null。缺点:会缓存大量这样的内容,内存存在溢出可能。后续如果有这样的业务key生成,则缓存中的数据就会成为脏数据。......
  • 安装单击redis
    1. #安装依赖2. yuminstall-ywgetgcc*3. #创建目录4. mkdir/htdocs/redis-p5. #下载软件包6. cd/tmp7. wget-chttp://test.e-bidding.org/gxdownload/redis-2.8.24.tar.gz#解压tarxfredis-2.8.24.tar.gz#将解压目录的内容移动到/htdocs/redismvredis-2.8......
  • Redis实现签到功能
    使用Redisson+BitMap实现签到1、引入Redisson依赖pom.xml<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId></dependency><dependency><gr......
  • Redis宕机恢复
    AOF(AppendOnlyFile)Redis持久化:AOF日志用AOF方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,Redis就会恢复得很缓慢,影响到正常使用。RDB(RedisDataBase)内存数据的全量快照,即把内存数据都保存到磁盘。save:主进程执行,会导致redis阻塞bgsave:创建......