V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
beryl
V2EX  ›  程序员

Redis 集群和分布式锁问题请教

  •  
  •   beryl · 2020-02-12 12:49:33 +08:00 · 2818 次点击
    这是一个创建于 1776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 redis cluster 模式, 在高并发场景使用 setnx,然后去数据库拿资源, 现在想将数据库资源 push 到 redis 的队列里面,然后再去 pop

    这里有两个问题:

    1. 在集群模式下去 pop 的时候,会存在重复消费情况么? 自己理解应该不会,因为数据是分布在某个 slot 上,请求进到固定的某个 redis 实例,加上 redis 是单线程,就不会重复获取

    2. 在主从模式,且多主的架构中,不加锁的情况是,是不是会从在类似重复消费的现象?因为有可能从不太的 redis 主实例读出来的数据

    9 条回复    2020-02-12 21:03:53 +08:00
    pastgift
        1
    pastgift  
       2020-02-12 13:08:09 +08:00 via iPhone
    请仔细阅读 redis 官方文档「 Distributed locks with Redis 」章节,里面相关库都列出来了
    beryl
        2
    beryl  
    OP
       2020-02-12 15:23:01 +08:00
    @pastgift 去看下先,thx
    dilu
        3
    dilu  
       2020-02-12 15:49:14 +08:00
    1 不重复 2 有可能
    masterjoess
        4
    masterjoess  
       2020-02-12 18:28:38 +08:00
    不记得在哪里看过评论说,不要拿 redis 做消息列队
    beryl
        5
    beryl  
    OP
       2020-02-12 19:20:11 +08:00
    @masterjoess 印象中之前也看到过,今天查的时候没有找到相关论据
    pastgift
        6
    pastgift  
       2020-02-12 19:29:14 +08:00 via iPhone
    @masterjoess #4 的确有地方说过,我记得 redis 有个关联项目是专门做消息队列的,但好像没什么起色
    事实上很多项目都支持把 redis 作为消息队列,比如 celery。事实上,redis 官方文档都写了如何利用 list 做可靠队列,所以应该没什么问题
    一般来说,每个队列元素小于 2kb 就没啥问题,过大就要考虑专业消息队列了
    kier
        7
    kier  
       2020-02-12 20:46:28 +08:00
    1.有理论上的概率出问题,就是主当机时,最新的操作没同步过去,然后发生主从切换,就会有重复
    2.主从模式的多主架构是什么意思?
    lovedebug
        8
    lovedebug  
       2020-02-12 20:59:47 +08:00
    看业务场景是否允许读取过期值
    daozhihun
        9
    daozhihun  
       2020-02-12 21:03:53 +08:00
    按照官方的策略,也会在一些极端情况下有 bug (不过很少会遇到)。
    不管你用什么策略,都要考虑一下对应的补偿策略,没有 100%的高枕无忧的方案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:21 · PVG 13:21 · LAX 21:21 · JFK 00:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.