一、创建监听配置类 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,成功监听到过期的数据。

参考博客: