notify-keyspace-event 是Redis 2.8 版本之后有的功能,需要手动去开启
Redis服务端的配置文件夹开启 事件
notify-keyspace-events ""
更变为
notify-keyspace-events "Ex"
设置完成后,重启Redis!
开启Redis支持Key失效事件后,就可以用代码去订阅这个事件了!
添加Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
弄一个Redis 配置类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.RedisMessageListenerContainer;
/**
* @author : zanglikun
* @date : 2021/10/20 11:47
* @Version: 1.0
* @Desc : Redis 配置类,用于Redis的Key失效的事件监听。
*/
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Autowired
RedisConnectionFactory redisConnectionFactory;
/*
这里不能丢,有了这个Bean才能又Key失效事件的监听
*/
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(){
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
return redisMessageListenerContainer;
}
}
添加一个组件
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
/**
* @author : zanglikun
* @date : 2021/10/20 11:50
* @Version: 1.0
* @Desc : Redis的Key 过期监听时间
*/
@Component
public class RedisKeyExpiration extends KeyExpirationEventMessageListener {
public RedisKeyExpiration(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
// 这是继承KeyExpirationEventMessageListener 主动重写的方法,用于处理当监听到了Key失效的时间
@Override
public void onMessage(Message message, byte[] pattern) {
super.onMessage(message, pattern);
System.out.println("当前失效的Key是:"+message);
// TODO 你可以正常执行你需要的代码逻辑!
}
}
搞定
开始测试
@Test
public void testRedisKeyExpire() {
for (int i = 0; i < 1000; i++) {
redisTemplate.opsForValue().set("Key_"+i, "Value_"+i, 10, TimeUnit.SECONDS);
}
System.out.println("执行成功");
}
控制台输出
至于乱码,很简单,RedisTemplate字符编码与序列化的时候有问题,自己重新弄一个RedisConfig并追加本文的内容即可RedisConfig的Bean即可!!!
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤