Redis 消息订阅实现,监听Redis键过期

一、RedisTemplate使用

Java项目中,使用RedisTemplate设置键-值失效时间,redisTemplate.opsForValue.set("key", "value", 10, TimeUnit.Hours);

设置该 键-值得失效时间为10个小时

二、监听该键值对失效

1. 配置redis服务器,修改redis.conf文件  

2. 编写监听器

@Component
public class Listener {

    /*
     * Redis消息监听器容器
     * 这个容器加载了RedisConnectionFactory和消息监听器
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@0__:expired"));
        return container;
    }

    /*
     * 将Receiver注册为一个消息监听器,并指定消息接收的方法(receiveMessage)
     * 如果不指定消息接收的方法,消息监听器会默认的寻找Receiver中的handleMessage这个方法作为消息接收的方法
     */
    @Bean
    MessageListenerAdapter listenerAdapter(Receiver receiver){
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

    /*
     * Receiver实例
     */
    @Bean
    Receiver receiver(CountDownLatch latch){
        return new Receiver(latch);
    }

    @Bean
    CountDownLatch latch(){
        return new CountDownLatch(1);
    }

    /*
     * Redis Template 用来发送消息
     */
    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory){
        return new StringRedisTemplate(connectionFactory);
    }

}

三、编写消息处理器

public class Receiver {

    private CountDownLatch latch;

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    public Receiver(CountDownLatch latch) {
        this.latch = latch;
    }

    public void receiveMessage(String message) {
        System.out.println("message: ", message);

        latch.countDown();
    }
}

猜你喜欢

转载自blog.csdn.net/sunzhengtaolz/article/details/87797291