Redis的发布订阅

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis在我们的开发中一般作为缓存,作用就是个缓存器,比如token,用户信息或者一些业务上需要临时存储不用入数据库的信息我们都可以往Redis里放,而且其作为单线程执行读取都比较快,这里就不去赘述其数据类型和常用的场景了,今天我们来看看如何使用Redis的发布订阅的,发布订阅传递当然还是消息,而一般在项目中发布订阅的场景我们使用的都是MQ,而Redis的与其类似,接下来进入正题。

微信截图_20220531145056.png


前言


Redis在我们的开发中一般作为缓存,作用就是个缓存器,比如token,用户信息或者一些业务上需要临时存储不用入数据库的信息我们都可以往Redis里放,而且其作为单线程执行读取都比较快,这里就不去赘述其数据类型和常用的场景了,今天我们来看看如何使用Redis的发布订阅的,发布订阅传递当然还是消息,而一般在项目中发布订阅的场景我们使用的都是MQ,而Redis的与其类似,接下来进入正题。


一.Redis的发布订阅如何实现


1.发布订阅的组成


1)发布者Publisher(类似MQ里的消息生产者)


2)订阅者Subscriber(类似MQ里的消息消费者)

ps: 包含注册中心的很多开源软件都在运用这种生产者消费者模式比如ZK


2.发布订阅能做什么

MQ的生产者消费者的作用是作为一个数据的暂存和路由类似数据中转站的功能,因为数据从生产者到消费者中间有这一层中转所以能够起到流量削峰的作用,而Redis呢?其实也类似。


二.Redis发布订阅的实现


1.发布消息 //这里使用的redisTemplate模板

String msg="我向你发送了一条消息......";
redisTemplate.convertAndSend("redis_msg", msg);
复制代码

2.订阅消费,消费消息处理逻辑

//获取redis连接
RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
       //这里给消息订阅者一个消息监听器 如果监听器监听到消息则会通知订阅了该消息的订阅者
       redisConnection.subscribe(new MessageListener() {
   @Override
   public void onMessage(Message message, byte[] bytes) {
      // 收到消息后可自行进行逻辑处理
      //为了方便 我们这里直接把消息打印出来即可
      log.info("收到了来自发布者的消息>>>{}", message);
   }
   //防止中文乱码
}, "redis_msg".getBytes(StandardCharsets.UTF_8));
复制代码

微信截图_20220531145157.png


小结


通过上面的示例我们可以看到Redis也能做MQ做的事情,但是为什么在一般的开发中不用Redis做主要的消息中间件来用呢,其实每个开源框架都有其侧重点,而且如果项目中Redis做了缓存又做消息中间件就跟鸡蛋放一个篮子里一样,一旦Redis出问题就影响两方面的业务,这种用法不建议。另外,接触多了开源框架,我们都会发现它们的一些共同处,里面使用了很多的设计模式,所以设计模式还是很重要的,即使开发中用不到但是能够熟悉掌握和灵活运用设计模式还是挺好的。

相关实践学习
基于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
目录
相关文章
|
7月前
|
存储 缓存 NoSQL
聊聊 Redis 的高级特性之一: 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 图中,消费者1和消费者2 订阅了 Redis 服务的频道 channel ,当生产者通过 PUBLISH 命令发送给频道 channel 时, 这个消息就会被发送给订阅它的两个客户端。
聊聊 Redis 的高级特性之一: 发布订阅
|
7月前
|
消息中间件 移动开发 NoSQL
Redis 协议 事务 发布订阅 异步连接
Redis 协议 事务 发布订阅 异步连接
|
7月前
|
NoSQL Redis
Redis之发布订阅
Redis之发布订阅
|
2月前
|
NoSQL Redis
Redis 发布订阅
10月更文挑战第18天
31 1
Redis 发布订阅
|
3月前
|
消息中间件 存储 NoSQL
18)Redis 的发布订阅模型
18)Redis 的发布订阅模型
33 0
|
7月前
|
存储 NoSQL Redis
Redis 简介 + Python 操作发布订阅
Redis 简介 + Python 操作发布订阅
108 0
|
7月前
|
消息中间件 设计模式 缓存
Redis发布订阅:美丽的陷阱与不宜之境
Redis发布订阅:美丽的陷阱与不宜之境
702 1
|
消息中间件 缓存 NoSQL
探索Redis发布订阅与消息队列:构建实时消息通信系统
本篇深入探讨了Redis的发布订阅模式和消息队列功能,展示了如何使用这两个特性构建实时消息通信系统。我们首先介绍了Redis的发布订阅模式,演示了如何通过PUBLISH命令将消息发布到特定频道,并使用SUBSCRIBE和UNSUBSCRIBE命令进行订阅和取消订阅操作。
579 0
|
7月前
|
消息中间件 NoSQL Redis
Redis发布订阅
【1月更文挑战第7天】 消息队列 Redis 发布订阅(publsub)是一种消息通信模式︰发送者(pub)发送消息,订阅者(sub)接收消息。微信、微博、关注系统! Redis客户端可以订阅任意数量的频道。
205 6
|
7月前
|
消息中间件 NoSQL Java
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
84 0