V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
REDGroundwu
V2EX  ›  程序员

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

  •  
  •   REDGroundwu ·
    likthiis · 240 天前 · 1885 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 条回复    2024-03-21 14:17:53 +08:00
    rrfeng
        1
    rrfeng  
       240 天前   ❤️ 1
    coderxy
        2
    coderxy  
       240 天前
    这种不是该用一主多从模式?
    emSaVya
        3
    emSaVya  
       240 天前
    redis 当分布式 db 纯属滥用。
    Kumo31
        4
    Kumo31  
       240 天前
    做不到吧,Redis 就不是线性一致的,不过 Redis 协议很简单,网上有很多 Raft on Raft/Paxos 的开源实现
    lmshl
        5
    lmshl  
       240 天前   ❤️ 2
    首先,不要试图挑战 CAP
    然后,我们再谈其他的

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

    你说的这个问题确实存在,因为主从同步是有延迟的,Redis 也不是强一致的系统。
    Kumo31
        7
    Kumo31  
       240 天前
    @Kumo31 补充一下,Jepsen 对 Redis 的分析报告( https://aphyr.com/posts/307-call-me-maybe-redis-redux )中指出了 Redis 能提供最强的保证也不超过因果一致性,并且嘲讽了一波作者认为设计分布式系统很简单这件事,评论里作者本人也下场 battle 了
    banzige
        8
    banzige  
       240 天前
    集群模式下,不可避免吧,各个 slave 节点更新有延时。
    MySQL 主从类似呀。
    crysislinux
        9
    crysislinux  
       240 天前 via Android
    也想看看都怎么搞的,我们访问量离单实例极限还远。真顶不住了我倾向于用 cluster
    NX2023
        10
    NX2023  
       239 天前
    腾讯二面问到了,然后答不上来😭
    mutalisk
        11
    mutalisk  
       239 天前
    无法保证吧,如果需要一致性的话,就用 zk 或者 etcd 这样的一致性组件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2702 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.