最近尝试使用redis做消息队列, 奇怪的是redis使用list做消息队列的话,为什么推送用lpush,而消费用的是brpop? 写代码的时候消费者大致如下:while(true){$res = Redis::brpop([key1], $time);//业务代码} 我这不是在阻塞检查list中有没有数据么,有数据就进行处理, 这里已经阻塞了, 所以我认为brpop换成rpop貌似也没问题啊, 想知道为什么还要有brpop这么个函数?
3 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
brpop
和 rpop
在功能上是有区别的。
你的代码里已经透漏了一些信息:brpop
的第一个参数是一个 array
.
$res = Redis::brpop([key1], $time);
使用 redis-cli
的话,该命令是这样的
> brpop key1 ... keyN timeout
brpop
功能:
从右到左扫描 key1 ... keyN
,对第一个非空 List
进行 rpop
操作并返回该值。如果所有 List
都是空或不存在,阻塞 timeout
秒,timeout
为 0
表示一直阻塞。阻塞时,如果有其他 client
对 key1 ... keyN
中任意一个 key
进行 push
操作时,阻塞接触并返回。如果超时,则返回 nil
。
其实就是相当于对多个队列(按照从尾队列 keyN
到头队列 key1
)进行 rpop
。
- 3 回答
- 0 关注
- 780 浏览
添加回答
举报
0/150
提交
取消