本帖最后由 游龙 于 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、消息订阅端 (服务端)代码如下图所示: 效果如下图所示:
|