redis之(十)redis实现消息中间件的功能

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
简介: [一]任务队列的好处 --->松耦合:生产者和消费者无需知道彼此实现的细节,只需要约定好任务的描述格式。这使得生产者和消费者可以由不同的团队使用不同的编程语言编写。 --->易于扩展:消费者可以有多个,而且可以分布在不同的机器。
[一]任务队列的好处
--->松耦合:生产者和消费者无需知道彼此实现的细节,只需要约定好任务的描述格式。这使得生产者和消费者可以由不同的团队使用不同的编程语言编写。
--->易于扩展:消费者可以有多个,而且可以分布在不同的机器。可以轻易降低单台服务器的负载。
 
[二]使用redis实现简单的任务队列(生产者消费者模型)
--->根据列表类型的存储结构实现队列
--->生产者命令:LPUSH key value[value ...] RPUSH key value[value...]
--->消费者命令:RPOP key 或BRPOP key timeout ,  LPOP key 或者 BLPOP key timeout
--->阻塞消费者命令:timeout 为0时,不设置超时时间,一直等待,直到有消息。如果设置数字,则单位为秒。
 
[三]使用redis实现优先级队列(生产者消费者模型)
--->设置多个任务队列,生产者按任务的优先级,将任务发往不同的队列
--->消费者订阅多个队列,队列的顺序:按优先级由高到低,从左侧往右侧排序。
--->结果现象:消费者每次取消息,都是从左侧往右侧取。先把优先级高的队列中任务消费完毕,才去消费优先级低的队列中的任务。实例:如下图
 
[四]使用redis实现发布订阅模型(广播模型)
--->发布者往redis中的channel发布一条消息x,所有订阅该channel的订阅者都可以得到这条消息x
--->发布者命令:PUBLISH channel message
--->订阅者命令:SUBSCRIBE channel [channel]
--->PUBLISH命令发布消息后,返回值表示,订阅到该消息的订阅者数量。如果返回0,表示无人订阅,消息不会持久化,会随即消失。后面及时有订阅者订阅了该频道,也无法订阅到之前该发布者发布的历史消息。
--->执行SUBSCRIBE命令后,客户端会进入订阅状态。处于此状态的客户端不能使用除SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE这四个属于“发布订阅”模式的命令之外的命令。否则会报错
--->SUBSCRIBE命令执行后,会返回三个值。第一个值是消息的类型。根据消息类型的不同,第二个,第三个值也会不同
(1)消息类型包含
=>subscibe,表示订阅成功的反馈信息。第二个值是订阅成功的频道名称,第三个值是当前客户端订阅的频道数量。
=>message,这个类型的回复是我们最关心的,它表示接收到消息。第二个值标示产生消息的频道名称,第三个值是消息的内容
=>unsubscribe.这个类型的回复表示成功取消订阅某个频道,第二个值对应的频道名称,第三个值是当前客户端订阅的频道数量。当此值返回0时,当前客户端会退出订阅状态。之后可以执行其他非“发布订阅”模式的命令。
[五]发布订阅模型:按照规则订阅
--->按规则订阅通道的语法
符号 含义
? 匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一字符,可以使用“-”符号表示一个范围。如[a-z][1-9]
\x 匹配字符x,用于转义符号。如果匹配“?”就需要使用\?
--->命令格式:PUSBSCRIBE  channelpattern[channelpattern...]
--->返回值四个值。
  (1)pmessage:表示是通过PUSBSCRIBE命令订阅频道接收到的。
  (2)channelpattern:表示是订阅时使用的是那个通配符
  (3)channelName:表示实际收到消息的频道命令
  (4)messageContext:表示收到消息的内容
--->使用PUSBSCRIBE命令可以重复订阅一个频道。比如客户端执行了。PUSBSCRIBE chanel.? channel.?*  那么这个时候向channel.2发送消息,则该订阅客户端将收到两条消息。同样如果客户端使用PUSBSCRIBE channel.10 channel.?* 订阅消息。则往channle1.10发送消息,该订阅客户端也会收到两条消息。但消息类型是两种message合pmessage。
 
 
[六]发布订阅模型:退订规则
--->通过匹配订阅的退订命令格式:PUNSUBSCRIBE [pattern [pattern ...]]
--->直接订阅的退订的命令格式:UNSUBSCRIBE [channel [channel ...]]
--->使用PUNSUBSCRIBE命令只能退订通过PSUBSCRIBE命令订阅规则。不会影响直接通过SUBSCRIBE命令订阅的频道
--->同样UNSUBSCRIBE命令也不会影响同过PSUBSCRIBE命令的订阅的频道。
--->容易错误的点:PUNSUBSCRIBE命令退订某个规则时,不会将匹配符号的命令规则展开。比如:用PUNSUBSCRIBE *是无法退订channel.*。而是必须使用PUNSUBSCRIBE channel.*才能退订channel.*
 
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
29 3
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
181 7
|
2月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
34 2
|
2月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
25 2
|
2月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
78 2
|
3月前
|
存储 消息中间件 缓存
中间件redis的使用
【9月更文挑战第28天】Redis 是一个开源的、基于内存的数据结构存储系统,可用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,使其在各种应用场景中表现出色。Redis 作为缓存中间件能显著提高数据访问速度,其缓存过期策略有助于管理数据生命周期。在 .NET 应用程序中使用 Redis 缓存,可通过安装 `StackExchange.Redis` 库并连接到 Redis 服务器来实现数据的读写操作。此外,Redis 作为消息中间件,基于生产者-消费者模型实现消息队列,确保消息的可靠性和顺序性。
|
4月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
|
4月前
|
存储 缓存 监控
【Azure Redis 缓存】Azure Redis 功能性讨论二
【Azure Redis 缓存】Azure Redis 功能性讨论二
【Azure Redis 缓存】Azure Redis 功能性讨论二
|
4月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】Azure Redis功能性讨论
【Azure Redis 缓存】Azure Redis功能性讨论