请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

50个进程拿数据, 可能会拿到相同的数据, 如何处理?

正在回答 回答被采纳积分+3

2回答

Lucar_陈 2020-03-05 19:08:31

老师本课抛出的问题,正好在这回答一下吧~~

多线程或多进程情况下,是有可能在zrangebyscore()步骤的时候拿到相同的任务,但是在zrem步骤的时候,redis里的zrem方法会决定唯一的抢占获取者,它的返回值决定了当前实例有没有获取到。

但是没获取到,又拿到任务的实例就浪费了一次,可以使用 Lua脚本来优化延时队列的逻辑,将轮询和争抢操作原子化,这样就可以避免竞争浪费。

4 回复 有任何疑惑可以回复我~
singwa 2020-03-21 14:25:38

您好。因为redis是单进程单线程,多个pHP进程去redis拿数据, 不会出现重复的内容。

3 回复 有任何疑惑可以回复我~
  • 老师,我有个疑问,Redis虽然是单进程单线程,但是如果进程A先执行了zrangebyscore方法后,在进程A执行zrem方法前进程B就执行了zrangebyscore方法,那么这个时候其实进程A和进程B中是有可能出现重复数据的呀,为什么多个PHP进程去Redis里拿数据不会出现重复的内容呢
    回复 有任何疑惑可以回复我~ 2021-10-21 16:42:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信