监听过期key,其实同redis的作为中间件差不多.具体使用跟业务来,
注意,redis过期的key并不是立马过期删除的,具体参见:https://blog.csdn.net/Jack__Frost/article/details/71216098
首先需要配置keyExpirationListenerContainer对应的bean;
@Bean
//key过期监听,指定数据库
RedisMessageListenerContainer keyExpirationListenerContainer(RedisMessageListener listener) {
RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
listenerContainer.setConnectionFactory(taskConnectionFactory());
listenerContainer.addMessageListener(listener, new PatternTopic("__keyevent@" + redisDb + "__:expired"));
return listenerContainer;
}
具体的PatternTopic配置有很多,我大概看了下,常用的就是"__keyevent@" + redisDb + "__:expired"
监听指定数据库的key过期.
然后还要自己写个listener,即可以实现MessageListener,也可以继承MessageListenerAdapter都可以,只监听key过期都可以没啥具体区别,继承的话主要是使用redis作为中间件,用来发布订阅使用的多:
package net.rdd.listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
@Component
public class RedisMessageListener extends MessageListenerAdapter {
//public class RedisMessageListener implements MessageListener {
private final Logger log = LoggerFactory.getLogger(getClass());
private final RedisSerializer<String> stringSerializer = new StringRedisSerializer();
@Override
//key过期会执行这个方法
public void onMessage(Message message, byte[] pattern) {
String key = stringSerializer.deserialize(message.getBody());
System.out.println(key);
}
}
注意在redis配置文件中注意的:
注意将下面默认的注释掉.
然后window启动指定对应的配置文件,否则会使用默认的.版本一定要注意3.0以上
redis-server.exe redis.windows.conf
即可
redis的版本也有要求,配置也需要改一下:https://blog.csdn.net/qq_38366063/article/details/84028785
具体配置源码参见我的另外一篇博客:https://blog.csdn.net/qq_38366063/article/details/84063459