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