消息通知


任务队列


使用任务队列的好处
  • 松耦合。生产者和消费者无需知道彼此的实现细节,只需要约定好任务的描述格式。这使得生产者和消费者可以由不同的团队使用不同的编程语言编写
  • 易于扩展。消费者可以有多个,而且可以分布在不同的服务器中, 借此可以轻易地降低单台服务器的负载

使用LPUSH和RPOP命令实现队列, 这里介绍一个新命令BRPOP和BLPOP BRPOP key [key ...] timeout(s) BRPOP命令和RPOP命令相似,唯一的区别是当列表中没有元素时BRPOP命令会一直阻塞住连接,直到有新元素加入

优先级队列

利用BRPOP命令可以检测多个key的功能。如果多个键都有元素,则按照从左到右顺序取第一个键中的一个元素。因此,要实现优先级队列,把优先级高的key放到前面就ok了。

发布/订阅
模式
  • "发布/订阅"模式中包含两种角色,分别是发布者和订阅者。
  • 订阅者可以订阅一个或若干个频道(channel)
  • 发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。
命令 描述
PUBLISH channel msg 发布消息. 接收到这条消息的订阅者数量. 发出去的消息不会被持久化,也就是说当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的就收不到了
SUBSCRIBE channel [channel ...] 订阅频道,可以同时订阅多个频道
UNSUBSCRIBE [channel ...] 取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道
PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则, 如果没有参数则会退订所有规则
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态

注意

  • 执行SUBSCRIBE命令后客户端会进入订阅状态,处于此状态下客户端不能使用除SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCRIBE这4个属于“发布/订阅”模式的命令之外的命令,否则会报错
  • 使用PUNSUBSCRIBE命令只能退订通过PSUBSCRIBE命令订阅的规则,不会影响直接通过SUBSCRIBE命令订阅的频道;同样UNSUBSCRIBE命令也不会影响通过PSUBSCRIBE命令订阅的规则。另外容易出错的一点是使用PUNSUBSCRIBE命令退订某个规则时不会将其中的通配符展开,而是进行严格的字符串匹配,所以PUNSUBSCRIBE无法退订channel.规则,而是必须使用PUNSUBSCRIBE channel.*才能退订

进入订阅状态后客户端可能收到三种类型的回复。 每种类型的回复都包含3个值,

消息类型(第一个值) 第二个值 第三个值
subscribe:表示订阅成功的反馈信息 订阅成功的频道名称 当前客户端订阅的频道数量
message:表示接收到的消息 产生消息的频道名称 消息的内容
unsubscribe:表示成功取消订阅某个频道 对应的频道名称 当前客户端订阅的频道数量

第一个值为unsubscribe, 当第三个值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令了

示例:

redis A>SUBSCRIBE channel.1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel.1"
3) (integer) 1
# PSUBSCRIBE 按规则订阅
redis C>PSUBSCRIBE channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1 redis B>PUBLISH channel.1 hi!
(integer) 2 #此时,C接收到回复
1) "pmessage"
2) "channel.?*" # 注意回复多了一个值,第二个值为订阅时使用的通配符
3) "channel.1"
4) "hi!"

规则channel.?*可以匹配channel.1和channel.10,但不会匹配channel.。

【数据库开发】Redis消息通知的更多相关文章

  1. Redis消息通知(任务队列和发布订阅模式)

    Redis学习笔记(十)消息通知(任务队列和发布订阅模式) 1. 任务队列 1.1 任务队列的特点 任务队列:顾名思义,就是“传递消息的队列”.与任务队列进行交互的实体有两类,一类是生产者(produ ...

  2. Redis消息通知

    Redis的消息通知通过列表类型实现,分为两种模式:阻塞式.发布/订阅式: 阻塞式 顾名思义,消息生产者负责生产消息,并将消息放到队列的一端,消息的消费者负责消费消息,从队列的另一端取出消息,然后对其 ...

  3. redis消息通知(任务队列/优先级队列/发布订阅模式)

    1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...

  4. Redis系列二之事务及消息通知

    一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...

  5. Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

    Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...

  6. 微信小程序客服消息开发实战:实时在手机上接收小程序客服消息通知,以及在手机上回复

    在微信小程序开发中,可以非常方便的集成客服功能,只需要一行代码便可以将用户引导至客服会话界面.这行代码就是: <button open-type="contact" bind ...

  7. 利用Redis发布订阅完成tomcat集群下的消息通知

    以下为个人想法,如果有说的不对的地方请各位大佬见谅! 这是博主的第一篇博客,可能排版以及一些描述有不合理的地方还请勿喷,希望大家尽可能的多给我这样的新人一些鼓励让我能在写博客的道路上走下去. 进入正题 ...

  8. spring中订阅redis键值过期消息通知

    1.首先启用redis通知功能(ubuntu下操作):编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登陆 ...

  9. Redis笔记(六)Redis的消息通知

    Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式. >>使用List实现队列 使用列表类型的L ...

随机推荐

  1. RabbitMQ的5种模式

    队列截图,去rabbitMq.com去找学习文档 =========================================================================== ...

  2. 百度UEditor编辑器从word粘贴公式

    官网地址http://ueditor.baidu.com Git 地址 https://github.com/fex-team/ueditor 参考博客地址 http://blog.ncmem.com ...

  3. ie 使用window.open页面报错

    window.open(url)打开新页面是如果要通过地址栏来传参要注意 var qt = ""; qt += "&teachMaterialDealInfo.b ...

  4. LOJ#2977. 「THUSCH 2017」巧克力(斯坦纳树+随机化)

    题目 题目 做法 考虑部分数据(颜色较少)的: 二分中位数\(mid\),将\(v[i]=1000+(v[i]>mid)\) 具体二分操作:然后求出包含\(K\)种颜色的联通快最小的权值和,判断 ...

  5. linux 安装nginx(转)

    转自https://www.cnblogs.com/xiaochongc/p/11527492.html 步骤: 1. 安装所需环境 a)安装gcc:安装 nginx 需要先将官网下载的源码进行编译, ...

  6. ArrayUtils.

    String sfck=mp.get("SFCK")==null?"":mp.get("SFCK").toString();     Str ...

  7. vue 脚手架安装

    首先安装node.js npm 配置全局安装路径和缓存 node 安装路径下新建两个目录,node_cache和node_global npm config set prefix "E:\n ...

  8. Alpha项目冲刺! Day6-产出

    各个成员今日完成的任务 林恩:任务分工,博客撰写,了解安卓环境搭建 杨长元:安卓本地数据库 李震:了解聊天类app相关内容 胡彤:完善服务端 寇永明:研究测试代码 王浩:研究测试代码 李杰:研究测试代 ...

  9. Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)

    Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08    

  10. Vuex 通俗版教程告诉你Vuex怎么用

    写在文前: 最近一直在用vue开发项目,写来写去就是那么些方法,对于简单的项目一些常用的vue方法足以解决,但是涉及到页面状态,权限判断等一些复杂的传值,vuex是必须的.对于vuex也运用一段时间, ...