【Redis】主从同步可能遇到的坑
一、主从同步可能遇到的坑
1、主从数据不一致
2、从库读取到过期数据
二、问题1:主从数据不一致
原因:主从库间命令复制是异步进行的
主库收到写命令后,会发送给从库。
但是,主库并不会等到从库实际执行完命令后,再把结果返回给客户端,而是主库自己在本地执行完命令后,就向客户端返回结果了。
如果从库还没有执行主库同步过来的命令或执行不及时,主从库间的数据就不一致了。
主要有两个原因:
1、主从库间的网络可能会有传输延迟,所以从库不能及时地收到主库发送的命令,导致命令执行延后
2、从库及时收到了主库的命令,但是正在处理其它复杂度高的命令(例如集合操作命令),导致命令阻塞,执行延后
解决思路:
1、尽量使用良好的硬件和网络环境,并实时做好监控
2、使用info replication 命令查看主库写命令进度(master_repl_offset)和从库复制写命令进度(slave_repl_offset),开发监控程序监控两者的差值,
如果超过阀值则移除客户端对该从库的访问,避免数据不一致;如果两者差值恢复到阀值范围内,则重新调整客户端对从库的访问。
三、问题2:从库读取到过期数据
原因:
1、从库不会同步执行主库删除命令,不会自动删除过期数据(主库读取到过期数据会自动删除)
2、时间差:比如主库设置60秒过期,是指主库执行的时间点往后60秒;该命令同步到从库后,是按从库执行时间点往后60秒,可能因为命令执行的时间差导致主库已过期,从库还没过期的情况
解决思路:
1、Redis对过期数据的处理: Redis 3.2 之前会读取到过期数据,之后会返回空值(不会删除)。所以,尽量使用 Redis 3.2 以后版本
2、时间差:尽量用EXPIREAT 和 PEXPIREAT,它们会把过期时间设置为具体的一个时间点(用时间服务器同步各个服务器的时钟)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-11-02 Dubbo_异常_服务注册运行正常但是Dubbo-Admin看不到服务(亲测可用)
2014-11-02 单元测试