您现在的位置是:首页 > 后台技术 > 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的使用(图文)