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

2020-02-12 12:49:33 +08:00
 beryl

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

这里有两个问题:

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

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

2615 次点击
所在节点    程序员
9 条回复
pastgift
2020-02-12 13:08:09 +08:00
请仔细阅读 redis 官方文档「 Distributed locks with Redis 」章节,里面相关库都列出来了
beryl
2020-02-12 15:23:01 +08:00
@pastgift 去看下先,thx
dilu
2020-02-12 15:49:14 +08:00
1 不重复 2 有可能
masterjoess
2020-02-12 18:28:38 +08:00
不记得在哪里看过评论说,不要拿 redis 做消息列队
beryl
2020-02-12 19:20:11 +08:00
@masterjoess 印象中之前也看到过,今天查的时候没有找到相关论据
pastgift
2020-02-12 19:29:14 +08:00
@masterjoess #4 的确有地方说过,我记得 redis 有个关联项目是专门做消息队列的,但好像没什么起色
事实上很多项目都支持把 redis 作为消息队列,比如 celery。事实上,redis 官方文档都写了如何利用 list 做可靠队列,所以应该没什么问题
一般来说,每个队列元素小于 2kb 就没啥问题,过大就要考虑专业消息队列了
kier
2020-02-12 20:46:28 +08:00
1.有理论上的概率出问题,就是主当机时,最新的操作没同步过去,然后发生主从切换,就会有重复
2.主从模式的多主架构是什么意思?
lovedebug
2020-02-12 20:59:47 +08:00
看业务场景是否允许读取过期值
daozhihun
2020-02-12 21:03:53 +08:00
按照官方的策略,也会在一些极端情况下有 bug (不过很少会遇到)。
不管你用什么策略,都要考虑一下对应的补偿策略,没有 100%的高枕无忧的方案

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

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

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

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

© 2021 V2EX