使用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订阅发布系统就配置完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值