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

2024-03-20 17:25:33 +08:00
 REDGroundwu

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

2334 次点击
所在节点    程序员
11 条回复
rrfeng
2024-03-20 17:27:34 +08:00
coderxy
2024-03-20 17:31:44 +08:00
这种不是该用一主多从模式?
emSaVya
2024-03-20 17:34:41 +08:00
redis 当分布式 db 纯属滥用。
Kumo31
2024-03-20 17:44:15 +08:00
做不到吧,Redis 就不是线性一致的,不过 Redis 协议很简单,网上有很多 Raft on Raft/Paxos 的开源实现
lmshl
2024-03-20 17:48:06 +08:00
首先,不要试图挑战 CAP
然后,我们再谈其他的

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

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

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

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

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

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

© 2021 V2EX