标题:[实践OK]redis的brpop简单使用,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Wed, 11 Apr 2018 14:41:48 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9712/ 内容: 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的效果吧,首先模拟一个消息的“生产者” connect("127.0.0.1", 6379); $r->lpush("msg","Hello ciaos"); $r->lpush("msg","Hello penjin"); ?> 然后模拟一个消息的消费者,而redis-server则充当中间的消息队列(我这里当然用的是redis的list类型) [codes=php] connect("127.0.0.1", 6379); $res = $r->brpop("msg",0); var_dump($res); ?> 很简单,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。首先运行消费者,可以看到程序阻塞了,然后运行“生产者”,则消费者输出了消息如下: php consumer.php array(2) { [0]=> string(3) "msg" [1]=> string(11) "Hello ciaos" } lpush操作和brpop操作也保证了队列的先进先出,如果用blpop则会看到输出的是"Hello penjin"(第二条消息)。 其中brpop还可以指定监测多个消息队列,直到有任意一个消息队列中有待处理消息时阻塞返回,感觉还是比较简单易用的。redis的list消息队列没有优先级的概念,所有消息都只能先进先出或者后进先出,要实现优先级,可以考虑使用set数据结构。 Generated by Jackxiang's Bo-blog 2.1.1 Release