Redis监听key过期
前言
有时候,在项目我们需要对redis的某些key进行监听…判断是否过期
方法1:定时任务不断判断key是否存在…
方法2:监听rediskey…当过期后,可直接拿到已过期的key
接下来,直入主题,上代码,上界面显示…:
可选择库进行过期KEY监听
此方式,亦可监听所有库KEY 过期…
1.定义类,实现MessageListener
@Component
public class RedisMessageListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
//body 即为redis的过期Key了,
String body = new String(message.getBody(), StandardCharsets.UTF_8);
System.out.println(body);
}
}
2.监听配置类
import org.springframework.beans.factory.annotation.Autowired;
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.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
/**
* @author : leilei
* @date : 21:54 2020/10/25
* @desc : redis监听配置类
*/
@Configuration
public class RedisMessageConfig {
private final RedisMessageListener redisMessageListener;
@Autowired
public RedisMessageConfig(RedisMessageListener redisMessageListener) {
this.redisMessageListener = redisMessageListener;
}
/**
* 监听策略..
* __keyevent@db__:expired
* __keyevent@1__:expired 即监听索引库1 的过期key
* __keyevent@2__:expired 即监听索引库2 的过期key
* __keyevent@*__:expired 即监听所有索引库 的过期key
* @return
*/
@Bean
public PatternTopic topic() {
return new PatternTopic("__keyevent@*__:expired");
}
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(
@Autowired RedisConnectionFactory redisConnectionFactory) {
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
//将监听类,以及监听策略作为参数
redisMessageListenerContainer.addMessageListener(redisMessageListener,topic());
return redisMessageListenerContainer;
}
}
演示:
2020 10-25 10:39:14 设置过期Key zs ttl 10
2020 10-25 10:39:24 监听到key zs 已过期
上边的配置仅为可能监听某个别库key 过期配置写法…
如果你需要监听所有库 key 过期…可简化代码如下:
霸道的监听所有库KEY 过期
1.定义类继承KeyExpirationEventMessageListener
首先,仍需定义一个类,但是不是实现MessageListener 而是改为继承KeyExpirationEventMessageListener
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener{
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 监听key过期事件
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 获取到失效的 key
String key = new String(message.getBody(), StandardCharsets.UTF_8);
System.out.println(key);
}
}
2.监听配置类
实际上 继承了此类 就等于使用了监听策略 keyevent@*:expired 即监听所有库的key过期事件
然后呢,我们依然需要定义一个监听配置类
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
如此,简单的几行代码即可实现对redis所有库的 KEY 过期事件的监听了!!!
1. 本站所有资源来源于用户上传和网络,如有侵权请及时联系删除,本站不承担任何法律责任!
2. 分享目的仅供大家学习和研究,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的教程、源码等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.94zyw.com",如遇到无法解压的请联系管理员!
94资源网 » Redis监听key过期
2. 分享目的仅供大家学习和研究,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的教程、源码等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.94zyw.com",如遇到无法解压的请联系管理员!
94资源网 » Redis监听key过期