springboot使用redis监听过期键

首先需要修改redis配置文件

打开redis配置文件,找到notify- keyspace- events “EX”
默认会是注掉的,下面会有一个notify- keyspace- events “”
这个是没有注掉的,直接将notify- keyspace- events “”注掉,再将notify- keyspace- events “EX”的注释放开即可;
springboot使用redis监听过期键_第1张图片
修改为这个样子就可以了

导入依赖
<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
编写代码

消息处理类

package com.mood.Utils;

import org.springframework.stereotype.Component;

@Component
public class RedisMessageReceiver {
    /**
     * 接收redis消息,并处理
     *
     * @param message 过期的redis key
     */
    public void receiveMessage(String message) {
        System.out.println("通知的key是:" + message);
    }
}

然后是设置监听频道,这在redis配置类中设置

	@Resource
    RedisConnectionFactory factory;

    /**
     * redis 订阅频道
     *
     * //RedisConnectionFactory connectionFactory
     * @param listenerAdapter
     * @return
     */
     @Bean
     public RedisMessageListenerContainer container(MessageListenerAdapter listenerAdapter) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        // 订阅通道,key过期时通知
        container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@0__:expired"));
        container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@1__:expired"));
        // 可以订阅多个通道

        return container;
    }
 	/**
     * 配置redis事件监听处理器
     *
     * @param receiver
     * @return
     */
    @Bean
    public MessageListenerAdapter listenerAdapter(RedisMessageReceiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

这样就可以监听到订阅的数据库中的过期键了,后续可以在消息处理类中对过期键进行处理。

你可能感兴趣的:(redis,spring,boot,java)