使用Spring Data Redis 实现订阅/发布
2017-06-08 22:13
761 查看
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实现一个订阅/发布系统
- Spring Data Redis实现一个订阅/发布系统
- 使用Spring-Redis实现消息的发布/订阅
- Redis系列-JAVA与redis整合-Spring Data Redis实现一个订阅/发布系统
- Spring Data Redis实现消息队列——发布/订阅模式
- 使用spring-data-redis实现incr自增
- Spring Boot使用Redis进行消息的发布订阅
- 【Redis】spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- spring data redis 集群(sentinel实现)和simple spring memcached分布式初使用
- linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能 标签: hiredishiredis异步APIhiredis事件处理redis消息订阅发布redis c接口 2016-
- spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- 使用Spring Data +Redis实现缓存
- 分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- 基于spring-redis发布订阅模式的实现
- redis实现消息队列&发布/订阅模式使用
- 分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- 使用redis实现消息发布订阅
- 使用redis的发布订阅模式实现消息队列
- Spring Boot使用Redis进行消息的发布订阅
- java+redis+spring mvc实现发布订阅(不同项目间)