利用redis(2.8.0+版本)订阅发布模式 ,当key过期时触发相关事件
修改redis配置文件# 在配置文件种加入这句话,开启key过期通知。然后重启redis notify-keyspace-events Ex测试是否配置正确
redis-cli开两个窗口
cli-1 订阅频道__keyevent@0__:expired(0代表数据库用的5就改为5)
127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "__keyevent@0__:expired" 3) (integer) 1
cli-2 存入一个 key,并设置过期时间
127.0.0.1:6379> set test hahah EX 5 OK
当 5 秒过后,cli-1 收到信息就代表配置成功
1) "pmessage" 2) "__keyevent@0__:expired" 3) "__keyevent@0__:expired" 4) "test"Springboot 接收 Redis 过期通知
接收通知类
import org.springframework.stereotype.Component;
@Component
public class RedisMessageReceiver {
public void receiveMessage(String message) {
System.out.println("通知的key是:" + message);
}
}
频道订阅
@Configuration
public class RedisConfig {
.....其他不相关代码.......
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 订阅通道,key过期时通知
container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@0__:expired"));
// 可以订阅多个通道
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(RedisMessageReceiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
......其他不相关代码......
}
补充
window下重启redis
关闭
redis-cli -h 127.0.0.1 -p 6379 shutdown
如果有密码,请先登录redis
redis-cli # password为你的密码 auth "password" shutdown启动
redis-server redis.windows.conf



