在实际的开发项目中,监听 key 的过期事件,应用非常广泛,例如:订单超时未支付,优惠券过期等等

一、说明

本篇文章是继:
【SpringBoot】三十四、SpringBoot整合Redis实现序列化存储Java对象
其中涉及到的知识及代码,本篇文章不再进行赘述

二、修改 Redis 配置文件

  • 1、在 Redis 的安装目录
  • 2、找到 redis.windows.conf 文件,搜索 “notify-keyspace-events”


修改为 “notify-keyspace-events Ex”,这样我们的 Redis 就支持 key 过期事件的监听了

三、注入redisMessageListenerContainer

注意:本偏文章衔接与上篇文章:【SpringBoot】三十四、SpringBoot整合Redis实现序列化存储Java对象,其中的配置信息本篇文章不在赘述

  • 1、还是在 RedisConfig.java 中注入一个 redisMessageListenerContainer 的Bean 用于监听
@Bean
RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();// 监听所有库的key过期事件container.setConnectionFactory(connectionFactory);return container;
}
  • 2、创建监听类RedisKeyExpirationListener

我们需要创建监听 key 过期类,来实现当事件触发时的具体操作

package com.zyxx.common.redis;import lombok.extern.slf4j.Slf4j;
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;/*** 监听 Redis key 过期事件** @Author Lizhou*/
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) {super(redisMessageListenerContainer);}/*** 针对 redis 数据失效事件,进行数据处理*/@Overridepublic void onMessage(Message message, byte[] pattern) {// 拿到keylog.info("监听Redis key过期,key:{},channel:{}", message.toString(), new String(pattern));}
}

我们可以监听到过期的 key 的信息,以及通道的信息

  • 3、操作 API
在 RedisUtils 中加入如下操作```java
/*** 写入数据,并设置过期时间*/
public boolean set(final String key, Object value, long time) {if (StringUtils.isBlank(key)) {return false;}try {template.opsForValue().set(key, value, time, TimeUnit.SECONDS);log.info("存入redis成功,key:{},value:{}", key, value);return true;} catch (Exception e) {log.error("存入redis失败,key:{},value:{}", key, value);e.printStackTrace();}return false;
}

借助此方法,我们可以向 Redis 中存入数据,并设置过期时间,单位为:秒(S)
``

四、测试

  • 1、测试用例
package com.zyxx.redistest;import com.zyxx.redistest.common.RedisUtils;
import com.zyxx.redistest.common.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;@SpringBootTest
class RedisTestApplicationTests {@Autowiredprivate RedisUtils redisUtil;@Testvoid contextLoads() {UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName("jack");userInfo.setCreateTime(new Date());// 放入redis,并设置过期时间为5秒redisUtil.set("user", userInfo, 5);}
}

我们向 Redis 中存入了一个 key 为 “user”,value 为 UserInfo 对象的数据,并设置了过期时间为 5 秒

注意:在测试之前,我们需要启动我们的项目,才能将 Bean 注入到我们的容器中,监听事件才会生效

  • 2、测试结果

    可以看出我们的数据存入 Redis 成功

5秒后…


触发了 key 过期事件,这时候,我们拿到过期的 key 就可以对应的做一些业务处理了

如您在阅读中发现不足,欢迎留言!!!

【SpringBoot】35、SpringBoot整合Redis监听Key过期事件相关推荐

  1. Redis监听key过期事件

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

  2. springboot 使用 redis 监听 key 的过期回调( 模拟设置订单号超时时间, 触发修改订单状态业务逻辑)

    本文Demo地址:https://gitee.com/wslxm/spring-boot-redis 一.redis 配置文件 redis.conf 修改如下 notify-keyspace-even ...

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

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

  4. springboot—监听容器启动事件—拦截器及注册

    1.监听容器启动事件 2.拦截器

  5. Redis监听失效的字段

    1.创建ApplicationContext对象 package com.cloud.drore.eboss.dealer.util;import org.springframework.beans. ...

  6. React Native - Keyboard API使用详解(监听处理键盘事件)

    参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...

  7. Vue.js 之 组件-监听子组件事件

    1.监听子组件事件 前面介绍了父组件如何通过 prop 向子组件传递数据,反过来,子组件如何向父组件通信呢? 在 Vue.js 中,这是通过自定义事件来实现的,子组件使用 $emit() 方法触发事件 ...

  8. python pyhook监听扫码_Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  9. vue输入框输入触发事件_详解.vue文件中监听input输入事件(oninput)

    详解.vue文件中监听input输入事件(oninput) .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变 ...

最新文章

  1. 作业 3 利用分支和循环结构解决问题
  2. intern_充分利用Outreachy Intern申请流程
  3. 题目448-寻找最大数
  4. 计算机在金属材料中的应用论文,浅谈金属材料在汽车轻量化中的应用论文
  5. 房地产中介信息管理系统平台源码开发解决方案
  6. IDEA中配置Junit4
  7. 文书档案管理系统服务器版,文书档案管理系统
  8. python输出数字三角形_蓝桥杯:数字三角的Python解决方案,三角形,之,解答
  9. 计算机二级excel怎么绝对引用,excel中绝对引用的快捷键
  10. 2022环境电器年度行业分析报告:洗地机同比增长357%,扫地机器人销量197万+
  11. 变分法证明两点之间线段最短
  12. html网页运行环境,网站运行的环境要求
  13. java 调用 ictclas50_中科院分词ICTCLAS5.0_JNI 使用方法
  14. html后代元素选择器,怎么使用html5中的后代选择器?后代选择器的用法详解!
  15. 音乐app、app原型、音乐原型、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型
  16. 微信3.1.0.58逆向-微信3.1.0.58HOOK接口说明(WeChatHelper.dll)-获取当前聊天微信ID
  17. 极限学习机(Extreme Learning Machine, ELM)的训练与预测matlab仿真
  18. Ableton Live 10 Suite v10.1.42 WiN-MAC 音乐制作宿主软件
  19. Linux下菜鸟用XMMS(转)
  20. Cimplicity 国内知名汽车厂设备监控PMC系统

热门文章

  1. 基于slurm框架的GPU服务器集群搭建方法
  2. 质量管理 - 成熟度常见模型
  3. 提升网站黏着度的技术手段其实跟“搞对象”完全一样,也有“潜规则”
  4. java环境变量设置和切换版本
  5. 工业CT分辨率——空间分辨率和密度分辨率
  6. 【ORACLE】21版本新特性之SQL宏(SQL MACROS)的分析
  7. 接口做的好怎么形容_9个色彩搭配网站,没当过设计师也能做好配色了
  8. 7-20 奥运排行榜
  9. 安装Linux Mint 17后要做的20件事
  10. 新闻发布系统-用户登录.模糊分页查询