redis cluster 不保证强一致性,在一些特殊场景,客户端即使收到了写入确认,还是可能丢数据的。 B 没有等待 B1 B2 B3 的确认就回复了 client,如果在 slave 同步完成之前,master 宕机了,其中一个 slave 会被选为 master,这时之前 client 写入的数据就丢了。 因为即使使用了这种同步复制方式,也存在特殊情况:一个没有完成同步的 slave 被选举为了 master。 6个节点 发生网络分区之后,形成了2个区, 这时 Z1 还是可以向 B 写入的,如果短时间内分区就恢复了,那就没问题,整个集群继续正常工作,但如果时间一长,B1 就会成为所在分区的 master,Z1 写入 B 的数据就丢了。 Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。 这个时间量是非常重要的,称为节点过期时间。 一个 master 在达到过期时间后,就被认为是故障的,进入 error 状态,停止接收写请求,可以被 slave 取代。 Redis Cluster 不保证强一致性,存在丢失数据的场景: 在 master 写成功,但 slave 同步完成之前,master 宕机了,slave 变为 master,数据丢失。 分区后一个 master 继续接收写请求,分区恢复后这个 master 可能会变为 slave,那么之前写入的数据就丢了。 可以设置节点过期时间,减少 master 在分区期间接收的写入数量,降低数据丢失的损失。场景1:异步复制

wait 命令可以增强这种场景的数据安全性。wait 会阻塞当前 client 直到之前的写操作被指定数量的 slave 同步成功。wait 可以提高数据的安全性,但并不保证强一致性。场景2:网络分区
A, B, C, A1, B1, C1,3个master,3个slave,还有一个client,Z1。
A, C, A1, B1, C1 和 B Z1。
maximum window(最大时间窗口) 可以减少数据损失,可以控制 Z1 向 B 写入的总数:过去一定时间后,分区的多数边就会进行选举,slave 成为 master,这时分区少数边的 master 就会拒绝接收写请求。
小结
wait 命令可以给为同步复制,但也无法完全保证数据不丢,而且影响性能。推荐学习:《redis教程》
相关文章
Redis集群节点间通信的带宽消耗如何进行评估?
为什么Redis 6.0建议从Lua脚本迁移到客户端缓存_对比服务端运算与本地缓存性能
Redis如何处理内存淘汰带来的额外开销?
Redis Lua脚本在处理复杂关联查询时有哪些限制?
如何通过Redis Lua脚本进行实时数据统计与汇总?
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn










