黑马程序员技术交流社区
标题: 关于redis队列的实现方式 [打印本页]
作者: 游龙 时间: 2017-12-7 18:52
标题: 关于redis队列的实现方式
本帖最后由 游龙 于 2017-12-7 19:16 编辑
关于redis队列的实现方式Redis队列实现方式有两种:
1、生产者消费者
2、发布者订阅者
一、生产者消费者模式1、普通(非阻塞) 比如一个队列里面,生产者A push了一个数据进去,消费者B pop了这个数据,这个队列依旧为空;所以是一对一。
是先进先出,还是先进后出等,可以根据lpush、push、rpush、lpop、rpop等函数来控制。
插入数据,如下图所示:
显示数据:
取出数据:
2、阻塞但是上面的命令都是立即返回的,无论数据有无,关于取数据lpop有个增强版本,blpop(block left pop)阻塞版本,
使用语法:blpop key1 key2 ... keyn 1
同时预获取多个key的值,并设置超时时间为1s,如果所有key,有些key有value就立即返回,如果所有key都没有value就阻塞1秒返回,如下图所示:
由于这种队列模式pop出来一个后就返回了,所以处理业务的时候最好把pop写在一个while循环里面。
二、发布者订阅者模式三个用户A,B,C同时都订阅了一个itcast名字叫youlong,然后发布者往youlong的itcast里面发布了一个数据,那么A,B,C三个用户都会收到该数据。
注意:消息订阅端需要实时监控着,消息发布端才能把消息推送过来,监控方式如第2点的效果图所示。
1、消息发布端 (发布者) 代码如下图所示:
效果如下:
2、消息订阅端 (服务端)代码如下图所示:
效果如下图所示:
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |