为什么要使用过期通知呢?
捕获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过期通知相关推荐

  1. redis key过期通知

    1.使用redis key 过期通知,需开启key过期通知功能: 登录进入redis-cli 客户端,执行: config set notify-keyspace-events Ex [或者启动red ...

  2. Redis key过期事件监听实现 - 30分钟自动取消未支付订单

    目录 一.前言 二.实现方案分析 三.Redis key过期事件方案实现步骤 3.1 Redis 安装步骤详见 3.2 修改 Redis 配置 3.3 在获取支付链接视图中设置key过期事件 3.4 ...

  3. java集成redis集群_spring集成redis cluster详解

    客户端采用最新的jedis 2.7 1.maven依赖: redis.clients jedis 2.7.3 2.增加spring 配置 classpath:connect-redis.propert ...

  4. springboot 集成redis key乱码\xac\xed\x00\x05t\x00\x0eHAOKE_HOT_WORD

    文章目录 场景 分析 解决 场景 springboot集成redis集群 检查key时发现key是二进制格式的 \xac\xed\x00\x05t\x00\x0eHAOKE_HOT_WORD 分析 R ...

  5. Redis key过期监听

    RedisKey超时监听 Key过期会不会立即删除? 不会立即删除:由于Redis属于单线程,主服务不会第一时间删除Key.所有Key不会在第一时间被删除. 删除机制: (1)定期删除:Redis每一 ...

  6. Redis Key过期及清除策略

    >Key过期命令: 127.0.0.1:6379> EXPIRE name 10 # 设置key的过期时间,单位是秒 (integer) 1 127.0.0.1:6379> ttl ...

  7. 多服务监听Redis key失效通知,并指定特定机器进行处理业务

    #1.修改 redis.conf 配置 找到notify-keyspace-events 并将notify-keyspace-events 修改为 notify-keyspace-events Ex ...

  8. Redis监听key过期事件

    通过Redis的过期策略,触发某些事件可以向指定的频道发送通知. 1. 修改redis配置文件,图示为windows下的配置,其他系统同理: notify-keyspace-events 的参数为 & ...

  9. springboot listener_Springboot 监听redis key的过期事件

    项目中常常会碰到这样的需求,用户下订单后,30分钟未完成自动取消订单的功能. 有人说这个简单呀,写个定时任务就搞定了.除了定时任务之外,难道就没有其他的方法来实现吗?有--Redis 的键空间通知事件 ...

最新文章

  1. Python3.0 我的DailyReport 脚本(一) 使用COM操作Excel
  2. Mule ESB 3.3与CloudHub
  3. LeetCode 多线程 1117. H2O 生成
  4. Mac连接远程Linux管理文件(samba)
  5. Python 函数的执行流程-函数递归-匿名函数-生成器
  6. Linux系统编程(七)消息队列
  7. Android 功耗(11)---Android 功耗分析之wakelock
  8. 程序设计思路报告快递运输路线优化系统
  9. java不同项目加token访问_利用JWT实现前后端分离的Token验证
  10. Tomcat 配置虚拟目录
  11. Linux安装Ant
  12. linux绕过内存写保护,TF卡写保护解决案例教程
  13. 愚人节的背后:技术在一面打假,一面造假
  14. 蓝桥杯 ALGO-45 算法训练 调和数列问题
  15. 笔记本设置wifi热点并抓包
  16. beeline软件_Beeline
  17. 华芯微特SWM181学习笔记--GPIO应用与环境搭建
  18. android sd卡名称,Android系统中SD卡各文件夹名称及功能详解
  19. redis 指定端口 启动
  20. 树莓派基于face_recognition人脸识别

热门文章

  1. 信用风险评分的原理及实现
  2. CentOS 7.5上安装 GitLab 最新版CE/EE
  3. 从业DBA以来的那些事儿
  4. 房企迎降息春风酝酿涨价 部分房企取消优惠
  5. OpenWrt系统配置UCI
  6. SQLServer汉字转全拼音函数
  7. android 数据存储的几种方式
  8. 使用Docker安装oracle 11g
  9. 三种函数指针的表达以及函数指针概念讲解
  10. 侧边栏php,关于一个社区系统「侧边栏」的实现