springboot+redis过期事件监听实现过程解析

网友投稿 523 2022-12-10


springboot+redis过期事件监听实现过程解析

1 修改 redis.conf配置文件:

K Keyspace events, published with keyspace@ prefix事件

E Keyevent events, published with keyevent@ prefix

g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, …

$ String commands

l List commands

s Set commands

h Hash commands

z Sorted set commands

x Expired events (events generated every time a key expires)

e Evicted events (events generated when a key is evicted for maxmemory)

A Alias for g$lshzxe, so that the “AKE” string means all the events.

redis.conf 的默认的配置是:notify-keyspace-events ""

我们需要改为:notify-keyspace-events Ex

即对应上面的键的过期事件。修改玩这个重启一下redis

2 客户端来监听redis的过期事件:

@Configuration

public class RedisListenerConfig {

@Bean

RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactjdbiPbOsRKory(connectionFactory);

return container;

}

}

3.书写一个监听器

@Slf4j

@Component

public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {

super(listenerContainer);

}

@Override

public void onMessage(Message message, byte[] pattern) {

String expiredKey = message.toString();

log.info("expiredKey========="+expiredKey);

}

4.查询方法中随便加了两个表中的不同id,一个30s,一个27s。

redisUtil.set("UserId"+user.get(0).getId(),user.get(0).getId(),30);

redisUtil.set("UserInfoId"+userInfo.get(0).getId(),userInfo.get(0).getId(),27);

控制台输出:

需要注意的是:

过期监听消息中返回的是,过期的键的key值http://,是没有返回value的


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中ThreadLocalRandom的使用详解
下一篇:SpringMVC生成的验证码图片不显示问题及解决方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~