Java集成Redis key过期通知
为什么要使用过期通知呢?
捕获Redis中过期的Key,解锁新姿势。比如有个用户会员的模块,那么可以在redis添加一个用户会员的有效时Key,然后在Java项目中捕获,处理相关的逻辑。
一、开启Redis Key过期通知的配置
这个配置需要手动开启,Redis默认是关闭的。Redis有两种方式开启该配置:
1.修改配置文件
打开Redis目录下的redis.conf,找到notify-keyspace-events “” ,改成notify-keyspace-events Ex。这里一定要改正确了!
通过上面的注释就可以发现,下方的配置是关于过期key通知的。
2.在redis-cli中更改配置
打开redis-cli.exe config set notify-keyspace-events Ex
二、修改好配置后在redis-cli.exe中测试是否可以监听过期key
1.打开一个redis-cli.exe,输入命令:
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
2.再打开一个redis-cli.exe,创建一个过期的key
127.0.0.1:6379> setex t_key 2 t_value
OK
127.0.0.1:6379>
如果在监听过期key中的redis-cli里多了过期的key,那么意味着配置正确。
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
1) "pmessage"
2) "__keyevent@0__:expired"
3) "__keyevent@0__:expired"
4) "t_key"
如果没有这个"t_key",就要回头看看redis.conf是否配置正确。配置文件中ctrl+f,是否能找到notify-keyspace-events Ex。如果有还没成功,检查配置文件中是否有多余的notify-keyspace-events “”,有则删掉。
三、在java项目中编写一个监听类
/*** @author wangwei* @date 2020/2/21 - 11:20*/
@Slf4j
public class KeyExpiredListener extends KeyExpirationEventMessageListener {public KeyExpiredListener (RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}@Overridepublic void onMessage(Message message, byte[] pattern) {// 获得过期的keyString keyName = message.toString();switch (nameSpace) {case "user":// TODO 这里处理逻辑log.info(keyName);}}
}
这里要继承KeyExpirationEventMessageListener 类,然后重写其中的onMessage方法,形参中的message便是是过期的key的Message对象。
到这还没有结束,还需要配置连接的redis属性!
四、编写一个配置类,配置redis
@Configuration
public class RedisConfig {@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Beanpublic RedisMessageListenerContainer redisMessageListenerContainer() {RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);return redisMessageListenerContainer;}@Beanpublic KeyExpiredListener keyExpiredListener() {return new KeyExpiredListener(this.redisMessageListenerContainer());}
第一个@Bean是创建一个新的Redis消息监听容器,然后指定Redis连接。第二个@Bean是给我们写的监听类指定一个Redis消息监听容器,即第一个@Bean的内容。
最后再检查配置文件中是否配置了Redis的属性。
spring:redis:host: localhostport: 6379
到此,Java集成Redis key过期通知就完成啦,是不是很简单呀?如有问题欢迎大牛指点~~
Java集成Redis key过期通知相关推荐
- redis key过期通知
1.使用redis key 过期通知,需开启key过期通知功能: 登录进入redis-cli 客户端,执行: config set notify-keyspace-events Ex [或者启动red ...
- Redis key过期事件监听实现 - 30分钟自动取消未支付订单
目录 一.前言 二.实现方案分析 三.Redis key过期事件方案实现步骤 3.1 Redis 安装步骤详见 3.2 修改 Redis 配置 3.3 在获取支付链接视图中设置key过期事件 3.4 ...
- java集成redis集群_spring集成redis cluster详解
客户端采用最新的jedis 2.7 1.maven依赖: redis.clients jedis 2.7.3 2.增加spring 配置 classpath:connect-redis.propert ...
- springboot 集成redis key乱码\xac\xed\x00\x05t\x00\x0eHAOKE_HOT_WORD
文章目录 场景 分析 解决 场景 springboot集成redis集群 检查key时发现key是二进制格式的 \xac\xed\x00\x05t\x00\x0eHAOKE_HOT_WORD 分析 R ...
- Redis key过期监听
RedisKey超时监听 Key过期会不会立即删除? 不会立即删除:由于Redis属于单线程,主服务不会第一时间删除Key.所有Key不会在第一时间被删除. 删除机制: (1)定期删除:Redis每一 ...
- Redis Key过期及清除策略
>Key过期命令: 127.0.0.1:6379> EXPIRE name 10 # 设置key的过期时间,单位是秒 (integer) 1 127.0.0.1:6379> ttl ...
- 多服务监听Redis key失效通知,并指定特定机器进行处理业务
#1.修改 redis.conf 配置 找到notify-keyspace-events 并将notify-keyspace-events 修改为 notify-keyspace-events Ex ...
- Redis监听key过期事件
通过Redis的过期策略,触发某些事件可以向指定的频道发送通知. 1. 修改redis配置文件,图示为windows下的配置,其他系统同理: notify-keyspace-events 的参数为 & ...
- springboot listener_Springboot 监听redis key的过期事件
项目中常常会碰到这样的需求,用户下订单后,30分钟未完成自动取消订单的功能. 有人说这个简单呀,写个定时任务就搞定了.除了定时任务之外,难道就没有其他的方法来实现吗?有--Redis 的键空间通知事件 ...
最新文章
- Python3.0 我的DailyReport 脚本(一) 使用COM操作Excel
- Mule ESB 3.3与CloudHub
- LeetCode 多线程 1117. H2O 生成
- Mac连接远程Linux管理文件(samba)
- Python 函数的执行流程-函数递归-匿名函数-生成器
- Linux系统编程(七)消息队列
- Android 功耗(11)---Android 功耗分析之wakelock
- 程序设计思路报告快递运输路线优化系统
- java不同项目加token访问_利用JWT实现前后端分离的Token验证
- Tomcat 配置虚拟目录
- Linux安装Ant
- linux绕过内存写保护,TF卡写保护解决案例教程
- 愚人节的背后:技术在一面打假,一面造假
- 蓝桥杯 ALGO-45 算法训练 调和数列问题
- 笔记本设置wifi热点并抓包
- beeline软件_Beeline
- 华芯微特SWM181学习笔记--GPIO应用与环境搭建
- android sd卡名称,Android系统中SD卡各文件夹名称及功能详解
- redis 指定端口 启动
- 树莓派基于face_recognition人脸识别