您现在的位置是:首页 > 后台技术 > 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的使用(图文)
相关文章
随机图文
-
springboot实现不同业务的日志打印到不同的文件中(图文)
这几天有个项目的日志信息比较多,需要把不同业务的日志打印到不同的文件中去,今天在公司搞了很久都没搞定,晚上回来搞,终于搞定了,记录一下。 -
代码简洁之道-validation
代码简洁之道-validation -
java 实现MQTT客户端(图文)
前端时间,总结了以下java使用MQTT客户端的使用方法,特地记录一下,方便以后使用 -
JWT的使用(图文)
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密