使用Spring Data Redis 實現訂閱/釋出
Redis
Redis是一個key-value的儲存系統,提供的key-value的資料介面,其效能非常的出色,一般常用作快取使用,但是其除了可以作為快取之外,自身也提供了一套訂閱/釋出的系統。
Spring Data Redis
Spring Data Redis是Spring的一套框架,提供了Redis 的各種操作,可以讓我們便捷的操作Redis,本文介紹一下基於Spring Data Redis實現的訂閱/釋出(pub/sub)系統。
PUB/SUB
Spring Data Redis中對Redis的操作是通過Spring封裝的一個redisTemplate實現的,在spring的配置檔案中進行一些相關的Redis配置資訊即可使用。
Spring配置:
<!-- 定義Spring Redis連線工廠 -->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.url}" />
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.password}" />
<property name="database" value="0" />
<property name="usePool" value="true" />
</bean>
<!-- 定義Spring RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connectionFactory-ref="redisConnectionFactory"/>
<bean id="redisService" class="com.test.redis.impl.RedisServicempl">
<property name="redisTemplate" ref="redisTemplate" />
</bean>
<!-- 定義Spring Redis的序列化器 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="jsonRedisSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
<!-- 定義Redis 監聽類 -->
<bean id="dataSyncEventListener" class="com.test.redis.DataSyncEventListener" />
<!-- 註冊Redis訊息訂閱的監聽器 -->
<redis:listener-container>
<redis:listener ref="dataSyncEventListener" serializer="jsonRedisSerializer" method="onMessage" topic="topic" />
</redis:listener-container>
在這裡,需要一點注意,訂閱訊息的監聽類,可以實現MessageListener介面或MessageDelegateListener介面,如何不想實現任何介面,則需要在method指定“handleMessage”方法名,並自己實現handleMessage方法。
Redis操作類:
public class RedisServiceImpl implements RedisService {
@AutoWired
private RedisTemplate<String, Object> redisTemplate;
@Override
public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
}
}
可以看到,通過這個 sendMessage方法,可以把一條可序列化的訊息傳送到channel頻道,訂閱者只要訂閱了這個channel,他就會接收發布者釋出的訊息.。
訊息監聽類:
public class DataSyncEventListener implements MessageListener {
@Autowired
private RedisSerializer<String> stringRedisSerializer;
@Autowired
private RedisSerializer<Object> jsonRedisSerializer;
@Override
public void onMessage(Message message, byte[] pattern) {
String channel = stringRedisSerializer.deserialize(message.getChannel());
Object object = jsonRedisSerializer.deserialize(message.getBody());
System.out.println("channel is :" + channel);
System.out.println("message is :" + object.toString);
}
}
當然有了釋出訊息的sendMessage,也得有個接收訊息的Listener,用於接收訂閱到的訊息。
這樣,Redis的PUB/SUB訂閱釋出系統就配置完成了。
相關文章
- 使用Spring Data Redis 釋出訂閱訊息SpringRedis
- spring boot 使用redis進行釋出訂閱Spring BootRedis
- Redis釋出訂閱Redis
- Redis 設計與實現 (六)--釋出訂閱Redis
- [實戰]laravel + redis訂閱釋出 +swoole實現實時訂單通知LaravelRedis
- Redis的釋出訂閱Redis
- Redis(設計與實現):---釋出與訂閱介紹Redis
- SpringBoot+Redis 實現訊息訂閱釋出Spring BootRedis
- Redis的釋出訂閱及.NET客戶端實現Redis客戶端
- Redis 的訂閱與釋出Redis
- Laravel Redis釋出與訂閱.LaravelRedis
- Redis之釋出與訂閱Redis
- 使用PostgreSQL替代Redis實現佇列、分散式鎖和釋出/訂閱SQLRedis佇列分散式
- node 訂閱釋出及實現
- 設計模式之釋出訂閱模式(2) Redis 釋出/訂閱模式設計模式Redis
- 個人學習系列 - Spring Boot 配合 Redis 實現簡單的釋出訂閱功能Spring BootRedis
- Redis系列(八):釋出與訂閱Redis
- redis 釋出與訂閱原理分析Redis
- 瑞士軍刀redis - 釋出訂閱Redis
- Spring Boot 2.x基礎教程:使用Redis的釋出訂閱功能Spring BootRedis
- 基於 Redis 的訂閱與釋出Redis
- Redis的訊息釋出和訂閱Redis
- js 實現簡單釋出訂閱模式JS模式
- Spring 中的釋出-訂閱模式Spring模式
- 釋出-訂閱方式實現非同步併發非同步
- 面試官:請實現Javascript釋出-訂閱模式面試JavaScript模式
- Postgres是否合適替代Redis或Kafka實現釋出訂閱作業? - HNRedisKafka
- Redisson 分散式鎖實現之前置篇 → Redis 的釋出/訂閱 與 LuaRedis分散式
- Redis 釋出訂閱模式:原理拆解並實現一個訊息佇列Redis模式佇列
- Redis學習筆記(二十) 釋出訂閱(下)Redis筆記
- redis原始碼分析之釋出訂閱(pub/sub)Redis原始碼
- SpringBoot Redis 釋出訂閱模式 Pub/SubSpring BootRedis模式
- Redis原始碼分析(三十)--- pubsub釋出訂閱模式Redis原始碼模式
- 釋出訂閱EventEmitterMIT
- 釋出-訂閱模式模式
- 釋出訂閱模式模式
- covrom/redispubsub:Redis Streams的釋出訂閱驅動程式VRRedis
- 通過釋出訂閱模式實現的事件委託模式事件