1、首先假设你有一台装好单机版redis的服务器,然后输入redis-cli命令,进入redis命令行:
2、然后输入PSUBSCRIBE __keyevent@0__:expired,会出现如下内容:
3、然后重新打开一个窗口输入redis-cli连接这个redis,然后输入setex test_key 3 test_value
4、切换回前一窗口,等待3秒后,画面应该是没变化的,因为我们还没有对key过期事件进行配置。
5、接着我们有两个选择,一个是找到redis.conf文件,修改其中的notify-keyspace-events ""为notify-keyspace-events "Ex",一个是在输入redis-cli之后输入命令CONFIG set notify-keyspace-events Ex
6、重复2到3两步,然后执行第4步,3秒后会出现如下内容:
7、这个就说明redis方面配置完成了,接下来改对我们的web项目进行改动了,这里在我们之前的“单redis服务器访问:singleRedis分支”的基础上进行改造
8、首先在RedisConfig中增加一个RedisMessageListenerContainer,如下:
/**
* key过期事件订阅需要
* @param redisConnectionFactory
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
return container;
}
9、然后定义一个使用这个container的监听器:
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer container) {
super(container);
}
/**
* 针对redis数据失效事件,进行数据处理
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
String expiredKey = message.toString();
log.info("过期key:" + expiredKey);
}
}
10、启动工程,然后我们再执行一遍第3步,等待3秒后就能在控制台看到打印的信息了。
完成。
有什么不清楚的可以参考github上的demo的singleRedis分支:
https://github.com/whol/springbootdemo/tree/singleRedis
最后修改于 2019-05-10 12:20:13
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

