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

Redis 主从结构是否存在某一时刻数据不一致?

  •  
  •   Markxu0 · 2022-07-20 10:52:46 +08:00 · 1978 次点击
    这是一个创建于 854 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在使用 MongoDB 副本集时,如果使用默认的读写偏好,插入数据后立刻查询,可能会出现刚插入到主库,还没来得及同步到从库,就在从库查询,然后导致这个记录没有被查询到。

    那么在 Redis 主从结构中,是否也存在类似的情况呢,插入一条数据,然后立刻查询,可能会查询不到数据? 如果不存在类似情况,Redis 又是如何处理的呢?

    8 条回复    2022-07-20 13:36:18 +08:00
    Jooooooooo
        1
    Jooooooooo  
       2022-07-20 10:55:04 +08:00
    那当然, 主从结构的存储都有这个问题

    有几个解法, 比如刚插入就查的场景去查主库, 或者查从库没查到再反查一下主库
    fcten
        2
    fcten  
       2022-07-20 11:00:08 +08:00
    crysislinux
        3
    crysislinux  
       2022-07-20 11:21:03 +08:00
    一般同步都是非常快的,所以一般就是
    1. 如果是客户端插入的数据,客户端可以直接乐观更新,就显示本地的数据
    2. 如果插入之后需要立即查,就等几秒钟,一般没啥问题
    3. 其他客户端查到旧数据也无所谓,只要不是一会儿新一会儿旧就行,因为同步很快,一般也没问题
    如果同步十几秒才完成,那就说明有问题了。

    一楼说的刚插入就查主库实际做起来还是挺麻烦的。看你需求严格到哪种程度了。
    crysislinux
        4
    crysislinux  
       2022-07-20 11:22:52 +08:00
    我们的备库都没读,只用来做高可用了。负载全靠 cluster 抗 😂
    crysislinux
        5
    crysislinux  
       2022-07-20 11:24:48 +08:00
    这个问题是需要妥协的,Designing data-intensive applications 里有专门描述这个问题的章节,你可以找来看看。
    lolizeppelin
        6
    lolizeppelin  
       2022-07-20 12:42:27 +08:00
    所以读写分离要有 async 参数设置
    async 查询连接从库
    非 async 查询连接主库
    lolizeppelin
        7
    lolizeppelin  
       2022-07-20 12:44:28 +08:00
    数据库要完全主从同步也是可以的,不过要牺牲性能的...操作落地要等待从库完成

    一搬的从库为了性能都是 async 同步的,主库不等从库完成
    Saxton
        8
    Saxton  
       2022-07-20 13:36:18 +08:00
    主从结构必定存在延迟问题,这是绝对的,只能叫准实时而不能叫实时。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3183 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:23 · PVG 21:23 · LAX 05:23 · JFK 08:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.