传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游龙 中级黑马   /  2017-12-7 18:52  /  1030 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 游龙 于 2017-12-7 19:16 编辑

关于redis队列的实现方式
Redis队列实现方式有两种:
1、生产者消费者
  • 普通(非阻塞)模式
  • 阻塞模式
2、发布者订阅者
一、生产者消费者模式1、普通(非阻塞)
       比如一个队列里面,生产者A push了一个数据进去,消费者B pop了这个数据,这个队列依旧为空;所以是一对一。
       是先进先出,还是先进后出等,可以根据lpush、push、rpush、lpop、rpop等函数来控制。
插入数据,如下图所示:
1.png
显示数据:
2.png
取出数据:
3.png
2、阻塞
但是上面的命令都是立即返回的,无论数据有无,关于取数据lpop有个增强版本,blpop(block left pop)阻塞版本,
使用语法:blpop key1 key2 ... keyn 1
同时预获取多个key的值,并设置超时时间为1s,如果所有key,有些key有value就立即返回,如果所有key都没有value就阻塞1秒返回,如下图所示:
4.png
由于这种队列模式pop出来一个后就返回了,所以处理业务的时候最好把pop写在一个while循环里面。
二、发布者订阅者模式
三个用户A,B,C同时都订阅了一个itcast名字叫youlong,然后发布者往youlong的itcast里面发布了一个数据,那么A,B,C三个用户都会收到该数据。

注意:消息订阅端需要实时监控着,消息发布端才能把消息推送过来,监控方式如第2点的效果图所示。
1、消息发布端 (发布者)
代码如下图所示:
5.png
效果如下:
6.png
2、消息订阅端 (服务端)
代码如下图所示:
7.png
效果如下图所示:
8.png

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马