一、创建监听配置类 RedisListenerConfig。
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;import org.springframework.data.redis.listener.RedisMessageListenerContainer;@Configurationpublic class RedisListenerConfig {@BeanRedisMessageListenerContainer listenerContainer(RedisConnectionFactory connectionFactory) {RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();listenerContainer.setConnectionFactory(connectionFactory);return listenerContainer;}@BeanKeyExpirationEventMessageListener redisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {return new RedisKeyExpirationListener(listenerContainer);}}
二、 创建监听器: RedisKeyExpirationListener 继承 KeyExpirationEventMessageListener .
这里只能获取到 过期的key,无法获取过期的value.
import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {@AutowiredRedisTemplate redisTemplate ;/** * Creates new {@link } for {@code __keyevent@*__:expired} messages. * * @param listenerContainer must not be {@literal null}. */public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}/** * 针对redis数据失效事件,进行数据处理 * * @param message * @param pattern */@Overridepublic void onMessage(Message message, byte[] pattern) {//获得失效的keySystem.out.println("onMessage pattern " + pattern + " " + " " + message);String channel = new String(message.getChannel());System.out.println(channel);}}
三: 设置redis的配置文件redis.config中的 notify-keyspace-events 为 Ex
四、验证一下:
在redis客户端执行:setex localhost:1>key 5 value 设置一个过期的key
观察idea控制台:发现打印了过期的key,成功监听到过期的数据。
参考博客: