Redis 要怎么保证各实例间的内存一致性?

278 天前
 REDGroundwu

如题,N 个 Redis 实例做读服务,倘若有一个实例上的 Redis 的某个内存数据被改了,其他实例上的 Redis 要怎么感知到这个改动,避免不同实例对这数据的响应结果不一致呢?或者其实 Redis 并不重视这个,有其他层面的方案来避免?

1933 次点击
所在节点    程序员
11 条回复
rrfeng
278 天前
coderxy
278 天前
这种不是该用一主多从模式?
emSaVya
278 天前
redis 当分布式 db 纯属滥用。
Kumo31
278 天前
做不到吧,Redis 就不是线性一致的,不过 Redis 协议很简单,网上有很多 Raft on Raft/Paxos 的开源实现
lmshl
278 天前
首先,不要试图挑战 CAP
然后,我们再谈其他的

你唯一能做的是用同步协议尽可能快的达成最终一致,但你无法始终保证一致性
lyy780808
278 天前
看你的描述应该是主从架构,你问题的出发点就不对,这 N 个实例都是从节点,它们数据的更新是由主节点来做的,而不是这 N 个实例之间互相感知。

你说的这个问题确实存在,因为主从同步是有延迟的,Redis 也不是强一致的系统。
Kumo31
278 天前
@Kumo31 补充一下,Jepsen 对 Redis 的分析报告( https://aphyr.com/posts/307-call-me-maybe-redis-redux )中指出了 Redis 能提供最强的保证也不超过因果一致性,并且嘲讽了一波作者认为设计分布式系统很简单这件事,评论里作者本人也下场 battle 了
banzige
278 天前
集群模式下,不可避免吧,各个 slave 节点更新有延时。
MySQL 主从类似呀。
crysislinux
278 天前
也想看看都怎么搞的,我们访问量离单实例极限还远。真顶不住了我倾向于用 cluster
NX2023
278 天前
腾讯二面问到了,然后答不上来😭
mutalisk
277 天前
无法保证吧,如果需要一致性的话,就用 zk 或者 etcd 这样的一致性组件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1025486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX