最近尝试使用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 关注
- 866 浏览
添加回答
举报
0/150
提交
取消
