您现在的位置是:首页 > 后台技术 > JavaJava
Redis实现监听过期key(图文)
第十三双眼睛2021-07-25【Java】人已围观
简介在订单业务中,有时候需要对订单设置有效期,有效期到了后如果还未支付,就需要修改订单状态。对于这种业务的实现,有多种不同的办法,比如:
1、使用Quartz,每次生成一个订单,就创建一个定时任务,到期后执行业务代码;
2、rabbitMq中的延迟队列;
3、对Redis的Key进行监控;
1首先搭建一个springboot项目,不多说
2引入依赖
3在配置文件种加入如下配置,个人比较喜欢用properties
4在服务器的配置文件种修改配置文件如下内容
notify-keyspace-events Ex
5创建一个Redis监控类,用于监控过期的key,该类需继承KeyExpirationEventMessageListener
6创建Redis配置类
6打开redis客户端,设置一个带有过期时间的键值对
setex a 10 a

的确在程序种监听到了过期事件,接下来就可以根据自己的业务进行相关的操作了。
如果想用redis客户端监控,命令如下:psubscribe __keyevent@0__0:expired
2引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> |
spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.password=123456 spring.redis.port=6379 |
notify-keyspace-events Ex
5创建一个Redis监控类,用于监控过期的key,该类需继承KeyExpirationEventMessageListener
package com.xinchen.redis.config; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @program: SpringCloud * @description: redis Key过期监听 * @author: zhang yi * @create: 2020-03-24 14:14 */ public class KeyExpiredListener extends KeyExpirationEventMessageListener { public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { System.out.println("过期key:" + message.toString()); } } |
package com.xinchen.redis.config; import org.springframework.beans.factory.annotation.Autowired; 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; /** * @program: SpringCloud * @description: redis配置类 * @author: zhang yi * @create: 2020-03-24 14:17 */ @Configuration public class RedisConfiguration { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisMessageListenerContainer redisMessageListenerContainer() { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); return redisMessageListenerContainer; } @Bean public KeyExpiredListener keyExpiredListener() { return new KeyExpiredListener(this.redisMessageListenerContainer()); } } |
setex a 10 a

的确在程序种监听到了过期事件,接下来就可以根据自己的业务进行相关的操作了。
如果想用redis客户端监控,命令如下:psubscribe __keyevent@0__0:expired
很赞哦! ()
下一篇:JWT的使用(图文)
相关文章
随机图文
JAVA空指针的各种情况
工作之中,经常会遇到报空指针这种情况,也是我遇到过的最多的异常,为了避免不再犯此种错误,特地记录一下。shiro学习(图文)
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序微服务springcloud(图文)
微服务就是由一系列围绕自己业务开发的微小服务构成,他们独立部署运行在自己的进程里,基于分布式的管理 微服务是一种架构方式: 将单一应用基于业务拆分多个微小服务,他们独立运行 独立部署 每个服务运行在自己计算机进程里面 对于这些服务都是分布式管理。 这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现(http)。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中创建springboot项目(图文)
之前学习springboot的时候,创建一个项目需要装一个sts插件,感觉很麻烦,今天特意花了40分钟时间,从网上找了一个教程,不用任何的插件,就用eclipse创建一个完整的springboot项目,高兴之余,记录一下。