[实践OK]redis的brpop简单使用,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。
Q:这个brpop后面的2参数啥意思?是想模拟多个消费者吗?那个yii不也有类似消费者和swoole这个例子的差距不对差别在哪鹅?
Swoole-2.1.2 进程池模块的使用:http://mp.weixin.qq.com/s?__biz=MzI0MjEwMDMzNQ==&mid=2652517441&idx=1&sn=06909bb58cc4c0f3ade589a005ed6e84&chksm=f2efe541c5986c5741aa240e9a4daaab47c542b325a0042c4fbd5094ded48221035d90003fe1&mpshare=1&scene=1&srcid=04119CY2J0y8Az2isPm9UKyL#rd
redis-cli
127.0.0.1:6379> del list1 list2
(integer) 0
127.0.0.1:6379> rpush list1 a b c
(integer) 3
127.0.0.1:6379> brpop list1 list2 0
1) "list1"
2) "c"
brpop的效果吧,首先模拟一个消息的“生产者”
很简单,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。首先运行消费者,可以看到程序阻塞了,然后运行“生产者”,则消费者输出了消息如下:
array(2) {
[0]=>
string(3) "msg"
[1]=>
string(11) "Hello ciaos"
}
lpush操作和brpop操作也保证了队列的先进先出,如果用blpop则会看到输出的是"Hello penjin"(第二条消息)。
其中brpop还可以指定监测多个消息队列,直到有任意一个消息队列中有待处理消息时阻塞返回,感觉还是比较简单易用的。redis的list消息队列没有优先级的概念,所有消息都只能先进先出或者后进先出,要实现优先级,可以考虑使用set数据结构。
Swoole-2.1.2 进程池模块的使用:http://mp.weixin.qq.com/s?__biz=MzI0MjEwMDMzNQ==&mid=2652517441&idx=1&sn=06909bb58cc4c0f3ade589a005ed6e84&chksm=f2efe541c5986c5741aa240e9a4daaab47c542b325a0042c4fbd5094ded48221035d90003fe1&mpshare=1&scene=1&srcid=04119CY2J0y8Az2isPm9UKyL#rd
redis-cli
127.0.0.1:6379> del list1 list2
(integer) 0
127.0.0.1:6379> rpush list1 a b c
(integer) 3
127.0.0.1:6379> brpop list1 list2 0
1) "list1"
2) "c"
brpop的效果吧,首先模拟一个消息的“生产者”
很简单,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。首先运行消费者,可以看到程序阻塞了,然后运行“生产者”,则消费者输出了消息如下:
array(2) {
[0]=>
string(3) "msg"
[1]=>
string(11) "Hello ciaos"
}
lpush操作和brpop操作也保证了队列的先进先出,如果用blpop则会看到输出的是"Hello penjin"(第二条消息)。
其中brpop还可以指定监测多个消息队列,直到有任意一个消息队列中有待处理消息时阻塞返回,感觉还是比较简单易用的。redis的list消息队列没有优先级的概念,所有消息都只能先进先出或者后进先出,要实现优先级,可以考虑使用set数据结构。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/9712/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表