我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行。
1、修改Redis配置文件
1.1:Windows下的Redis存在两个配置文件

修改带有service的配置文件才会有效。
打开配置文件,找到下面一行代码:
notify-keyspace-events ""
然后修改配置,如下图配置:

很简单,替换注释一下就好。
2、重启Redis服务
重启Redis服务有两种方式:
1、直接win+R,打开运行对话框,输入Services.msc,打开服务列表。然后找到Redis服务重启就好了。
2、打开cmd命令窗口,输入下面命令:
redis-server --service-stop

关闭成功!!
3.打开cmd命令窗口,输入下面命令:
redis-server --service-start

开启成功!!
3、在springboot项目中配置Redis配置
我的项目使用的是springboot2.0.5,所以一下配置适用springboot2.0.5项目,其他版本没试过。
两种方式:
第一种:指定:__keyevent@0__:expired,监听指定的db键的过期事件。
Redis配置第一步:
1/** 2 * TODO Redis配置 3 * @author zhuzhen 4 * @date 16:20 2018/12/18 5 */ 6@Configuration 7@EnableCaching 8public class RedisConfig extends CachingConfigurerSupport { 9 10 /** 11 * TODO 监听 Redis键过期事件 12 * @author zhuzhen 13 * @date 14:38 2018/12/21 14 * @param connectionFactory 15 * @return org.springframework.data.redis.listener.RedisMessageListenerContainer 16 */ 17 @Bean 18 RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { 19 RedisMessageListenerContainer container = new RedisMessageListenerContainer(); 20 container.setConnectionFactory(connectionFactory); 21 container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired")); 22 return container; 23 } 24 25}
Redis配置第二步:
实现MessageListener接口:
1/** 2 * @author zhuzhen 3 * @version 1.0 4 * @description TODO 自定义Redis过期监听事件 5 * @className com.nongcai.rabbitmq.demo.redis.RedisExpiredListener 6 * @date 2018/12/21 14:42 7 */ 8public class RedisExpiredListener implements MessageListener { 9 10 @Override 11 public void onMessage(Message message, byte[] bytes) { 12 // 建议使用: valueSerializer 13 byte[] body = message.getBody(); 14 byte[] channel = message.getChannel(); 15 //Redis数据的键 16 String redisId = new String(body); 17 18 System.out.println("onMessage >> " ); 19 System.out.println(String.format("channel: %s \n body: %s \n bytes: %s" 20 ,new String(channel), new String(body), new String(bytes))); 21 22 } 23}
第二种:监听所有的db键的过期事件。
Redis配置第一步:配置监听bean
1/** 2 * TODO 监听 Redis键过期事件 3 * @author zhuzhen 4 * @date 14:38 2018/12/21 5 * @param connectionFactory 6 * @return org.springframework.data.redis.listener.RedisMessageListenerContainer 7 */ 8 @Bean 9 RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { 10 11 RedisMessageListenerContainer container = new RedisMessageListenerContainer(); 12 container.setConnectionFactory(connectionFactory); 13// container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired")); 14 return container; 15 }
Redis配置第二步:
1/** 2 * @author zhuzhen 3 * @version 1.0 4 * @description TODO 监听所有db的过期事件__keyevent@*__:expired" 5 * @className com.nongcai.rabbitmq.demo.redis.RedisKeyExpirationListener 6 * @date 2018/12/21 14:39 7 */ 8@Component 9public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { 10 11 public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { 12 super(listenerContainer); 13 } 14 15 @Override 16 public void onMessage(Message message, byte[] pattern) { 17 // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key 18 System.out.println("message>>> " + message); 19 System.out.println("pattern>>> " + new String(pattern)); 20 String expiredKey = message.toString(); 21 System.out.println("Redis的键:" + expiredKey); 22 23 } 24}
自此,监听Redis键过期事件配置完成。
spring关于Redis文章地址:https://spring.io/guides/gs/messaging-redis/