beryl
V2EX  ›  程序员

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

By beryl at 2020 年 2 月 12 日 · 3910 次点击

使用 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 年 2 月 12 日 via iPhone
请仔细阅读 redis 官方文档「 Distributed locks with Redis 」章节,里面相关库都列出来了
beryl
   2
beryl  
OP
   2020 年 2 月 12 日
@pastgift 去看下先,thx
dilu
   3
dilu  
   2020 年 2 月 12 日
1 不重复 2 有可能
masterjoess
   4
masterjoess  
   2020 年 2 月 12 日
不记得在哪里看过评论说,不要拿 redis 做消息列队
beryl
   5
beryl  
OP
   2020 年 2 月 12 日
@masterjoess 印象中之前也看到过,今天查的时候没有找到相关论据
pastgift
   6
pastgift  
   2020 年 2 月 12 日 via iPhone
@masterjoess #4 的确有地方说过,我记得 redis 有个关联项目是专门做消息队列的,但好像没什么起色
事实上很多项目都支持把 redis 作为消息队列,比如 celery。事实上,redis 官方文档都写了如何利用 list 做可靠队列,所以应该没什么问题
一般来说,每个队列元素小于 2kb 就没啥问题,过大就要考虑专业消息队列了
kier
   7
kier  
   2020 年 2 月 12 日
1.有理论上的概率出问题,就是主当机时,最新的操作没同步过去,然后发生主从切换,就会有重复
2.主从模式的多主架构是什么意思?
lovedebug
   8
lovedebug  
   2020 年 2 月 12 日
看业务场景是否允许读取过期值
daozhihun
   9
daozhihun  
   2020 年 2 月 12 日
按照官方的策略,也会在一些极端情况下有 bug (不过很少会遇到)。
不管你用什么策略,都要考虑一下对应的补偿策略,没有 100%的高枕无忧的方案
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 36ms · 3.9.8.5