iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis入门(5) - 消息通知
  • 146
分享到

Redis入门(5) - 消息通知

Redis入门(5)-消息通知 2016-07-22 06:07:14 146人浏览 绘本
摘要

使用列表实现任务队列 优先级队列 按照规则订阅 Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可

Redis入门(5) - 消息通知

  • 使用列表实现任务队列
  • 优先级队列
  • 按照规则订阅

Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可以实现任务队列。

与任务队列进行交互的实体有两类,一类是生产者(producer),一类是消费者(consumer)。生产者会将需要处理的任务放入任务队列中,而消费者则不断地从任务队列中读入任务信息并执行。

使用任务队列可以达到松耦合的效果,生产者和消费者无需知道彼此的实现细节,只需要约定好任务的描述格式。这使得生产者和消费者可以由不同的团队使用不同的编程语言编写。

而且这种模型下,消费者可以很容易地进行扩展,并可以分布在不同的服务器,降低单台服务器的负载。

使用列表实现任务队列

Redis的列表类型支持从一边PUSH、从另一边POP的操作,用作队列非常合适。只需生产者通过LPUSH命令将任务加入列表中,另一边让消费者不断使用RPOP命令从列表中取出即可。但不希望消费者不停RPOP,可以用BRPOP改进。BRPOP在列表中没有元素时BRPOP命令会一直阻塞住连接,直到有新元素加入。

BRPOP命令接收两个参数,第一个是键名,第二个是超时时间,单位是秒。当超过了此时间仍然没有获得新元素的话就会返回nil。超时时间设置为0时,如果没有新元素加入列表就会永远阻塞下去。

开启多个客户端

为了测试消息通知,可以开启多个redis-cli实例。
如果使用的是redis的Docker镜像的话,可以先启动一个redis容器作为redis server:

docker run --name redisserver -d -p 6379:6379 redis redis-server

redis-server命令可以启动redis server。
然后可以多开几个终端,都执行下面的命令以启动redis容器,并连接之前启动的redisserver,这样就可以作为redis client使用了:

docker run -it --link redisserver:redis --rm redis redis-cli -h redisserver -p 6379

在实例A中输入:

 BRPOP queue 0

接下来实例A会一直处于阻塞状态。然后在实例B中向队列加入元素:

 LPUSH queue taskk

这时马上就可以在实例A中看到返回结果,同时可以验证queue中刚刚加入的元素已经被取走了。
与BRPOP对应,还有BLPOP命令。

优先级队列

BRPOP命令可以同时接收多个键,如:

 BRPOP queue:1 queue:2 queue:3 0

这时它会同时检测这几个键,如果所有键都没有元素则阻塞,如果其中有一个键有元素则会从该键中弹出元素。
如果多个键都有元素则按照从左到右的顺序取第一个键中的一个元素。

借助这些特性可以实现优先级队列,queue:1 queue:2 queue:3三个队列中,queue:1的优先级最高,这个队列中的任务会优先被消费。

比如在一个网站中,向用户发送的邮件中账号激活邮件的优先级比活动推广邮件的优先级高,这时就可以将这两种邮件放在不同的队列,用BRPOP来优先发送激活邮件。

“发布/订阅”模式

除了实现任务队列外,Redis还提供了一组命令可以让开发者实现“发布/订阅”(publish/subscribe)模式。“发布/订阅”模式同样可以实现进程间的消息传递。
用列表类型实现的任务队列中,一个任务只能被一个消费者消费,多个生产者都可以向队列推送任务;
在“发布/订阅”模式下,一条消息可以被所有订阅这个频道订阅者接收,多个发布者也都可以向指定的频道推送消息。

在redis-cli实例A发布消息:

 PUBLISH channel.1 msg1

PUBLISH命令的返回值表示接收到这条消息的订阅者数量。发出去的消息不会被持久化,客户端订阅channel.1后只能收到后续发布到该频道的消息,之前发送的是收不到的。

在redis-cli实例B订阅channel.1

 SUBSCRIBE channel.1

SUBSCRIBE命令可以同时订阅多个频道。

执行SUBSCRIBE命令后客户端会进入订阅状态,处于此状态下客户端只能使用属于“发布/订阅”模式的命令,这些命令有SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCRIBE。

但在redis-cli中进入订阅状态后是无法退出到非订阅状态的,只能关闭cli。

实例B已经订阅了channel.1,这时如果再从实例A向channel.1发布消息msg1,实例B就会收到下面的响应:

1) "message"
2) "channel.1"
3) "msg1"

第一行是消息类型,消息类型的取值有subscribe/message/unsubscribe。
当消息类型为message时,第二行表示频道名称,第三行是消息的内容;
当消息类型为subscribe时,表示订阅成功的反馈信息。第二行是订阅成功的频道名称,第三行是当前客户端订阅的频道数量。
当消息类型为unsubscribe时,第二行是对应的频道名称,第三行是当前客户端订阅的频道数量,当此值为0时客户端会退出订阅状态。

按照规则订阅

除了可以使用SUBSCRIBE命令订阅指定名称的频道外,还可以使用PSUBSCRIBE命令按照按照指定的规则订阅多个频道。如:

> PSUBSCRIBE channel.*
 Reading messages... (press Ctrl-C to quit)
 1) "psubscribe"
 2) "channel.*"
 3) (integer)1"

订阅规则支持glob风格通配符格式,channel.可以匹配任意数量的字符。
使用PSUBSCRIBE命令可以重复订阅一个频道,如某客户端执行了PSUBSCRIBE channel.? channel.?*,这时向channel.2发布消息后该客户端会收到两条消息。

PUNSUBSCRIBE命令可以退订指定的规则

PUNSUBSCRIBE [pattern ...]

如果没有指定pattern参数,则会退订所有由PSUBSCRIBE订阅的规则。

使用PUNSUBSCRIBE命令只能退订通过PSUBSCRIBE命令订阅的规则,不会影响直接通过SUBSCRIBE命令订阅的频道;同样UNSUBSCRIBE命令也不会影响通过PSUBSCRIBE命令订阅的规则。

您可能感兴趣的文档:

--结束END--

本文标题: Redis入门(5) - 消息通知

本文链接: https://www.lsjlt.com/news/6403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Notification消息通知 自定义消息通知内容布局
    具体操作:自定义消息通知内容布局;点击界面中心的“点击发送消息”TextView控件,模拟发送通知消息,通知栏接收消息,点击几次则发送几次,点击通知栏消息,跳转到详情界面。activity_main.xml:<LinearLayout...
    99+
    2023-05-30
    notification 消息通知
  • J2EE 5从入门到精通
    J2EE 5从入门到精通Java 2 Enterprise Edition (J2EE)入门学习指南: Detail:J2EE 5从入门到精通[@more@]...
    99+
    2023-06-03
  • Win11如何关闭消息通知
    Win11如何关闭消息通知?当我们在全屏玩电脑游戏时,并不习惯系统弹出消息通知来影响游戏体验,那么应该如何关闭消息通知呢?下面小编就以Win11系统为例,为大家带来Win11关闭消息通知的方法。win11关闭消息通知的方法最先点一下右下方的...
    99+
    2023-07-10
  • win10怎么屏蔽通知消息
    今天小编给大家分享一下win10怎么屏蔽通知消息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、按下键盘上的win+R快捷...
    99+
    2023-06-28
  • spring整合redis消息监听通知使用的实现示例
    目录问题引入1.1 过期问题描述1.2 常用解决方案分析1.3.整合SpringData Redis开发spring整合redis监听消息1. 配置监听redis消息2 测试消息结合...
    99+
    2024-04-02
  • C# Winform消息通知之系统本地通知local toast notification
    目录引言toast 通知的结构发送本地toast通知的操作步骤安装NuGet包Microsoft.Toolkit.Uwp.Notifications通知的发送(文本通知)处理点击通知...
    99+
    2024-04-02
  • spring整合redis消息监听通知使用的方法是什么
    本篇内容介绍了“spring整合redis消息监听通知使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题引入在电商系统中,秒...
    99+
    2023-06-22
  • 永久关闭win10通知中心的通知消息方法
      很多升级为win10 9926的用户对于通知中心的通知消息不断弹出很是反感,想要关闭要怎么操作呢下文小编就为大家带来永久关闭win10通知中心消息的方法,有需要的朋友一起去看下吧。   Win10预览版9926的通知...
    99+
    2023-06-11
    win10 中心 消息 通知 方法
  • vue通知提醒消息举例详解
    目录前言一、Notification二、Notification引用1.全局引用 2.单独引用三、参数说明四、简单案例 五、项目实战1、定义全局Notificat...
    99+
    2023-03-24
    vue 消息通知 vue通知提醒消息 vue消息推送
  • Redis入门知识点有哪些
    这篇文章主要介绍“Redis入门知识点有哪些”,在日常操作中,相信很多人在Redis入门知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis入门知识点有哪些”...
    99+
    2024-04-02
  • 如何取消亚马逊云服务通知消息
    打开控制台或浏览器,进入“服务”页面。 点击“通知消息”选项。 在弹出的通知消息窗口中,选择“停止通知”或“停用通知”。 如果您想要删除所有通知消息,请在“停用通知”前勾选所有选项,然后单击“删除”按钮。 请注意,取消通知消息可能会影...
    99+
    2023-10-27
    亚马逊 消息 通知
  • win10怎么设置屏蔽通知消息
    这篇文章主要介绍“win10怎么设置屏蔽通知消息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10怎么设置屏蔽通知消息”文章能帮助大家解决问题。设置方法:使用快捷键win+r,在运行一栏中输入...
    99+
    2023-06-27
  • ESP32+idf开发之WIFI通信入门(5)HTTP通信
    ESP32+idf开发之WIFI通信入门(5)HTTP通信 一、实现功能: esp32作为HTTP客户端分别使用GET方法和POST方法向HTTP服务端发送请求得到响应,具体如下: GET方法:向web服务器url发出get请求/add,发...
    99+
    2023-08-22
    http 网络 服务器 物联网 嵌入式硬件
  • KotlinService实现消息推送通知过程
    目录建立Service绑定服务小结四大组件,就剩下最后一个Service ,他比较重要,相当于后台服务,基本上大部分的app,都会有一两个这样的服务Service 。 Service...
    99+
    2022-12-08
    Kotlin Service消息推送 Kotlin Service推送通知 Kotlin Service
  • vue通知提醒消息怎么实现
    今天小编给大家分享一下vue通知提醒消息怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Notification这...
    99+
    2023-07-05
  • Java JMS入门:轻松掌握消息传递技术的基础知识
    1. Java JMS 简介 Java JMS 是一个用于建立、发送和接收消息的 Java API。它提供了可靠的消息传递功能,非常适合分布式系统和企业级应用程序。消息传递系统可以将消息从一个应用程序发送到另一个应用程序,即使这两个应用...
    99+
    2024-02-26
    Java JMS 消息传递 JMS API ActiveMQ 发布/订阅 点对点
  • PHP与数据库消息通知的集成
    随着互联网和信息化的快速发展,信息的传递已经成为人们生活中不可或缺的一部分。因此,如何在网站和应用程序中实现消息通知也成为了越来越多的开发者需要处理的问题。PHP作为一种流行的编程语言,可以通过与数据库的集成来实现消息通知功能。本文将介绍P...
    99+
    2023-05-15
    数据库 PHP 消息通知
  • redis的入门知识点有哪些
    这篇文章给大家分享的是有关redis的入门知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类ke...
    99+
    2023-06-28
  • 阿里云服务器消息通知让你的消息传递更高效
    在信息化时代,无论是企业还是个人,都需要及时获取和处理信息。而阿里云服务器消息通知服务,可以帮助你在阿里云服务器上实现高效的消息传递。本篇文章将详细介绍阿里云服务器消息通知服务的使用方法和优势。 阿里云服务器消息通知是阿里云提供的一个服务,...
    99+
    2023-11-01
    消息 高效 阿里
  • Python 在图片加上消息通知的文字
    一.需求:在头像加上消息通知图标 二.实现 1.导入PIL 包并导入相关的模块呢 from PIL import Image, ImageFont, ImageDraw 遇到问题:因为使用的是python3 直接导入PIL的安装PIL模块...
    99+
    2023-01-31
    消息 文字 通知
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作