Redis 设置失效 key , 提供了一个方便的功能,在加入Redis 监听之后,可以部分取代定时任务;
举个简单的例子:
未支付订单,30分钟过期取消,更改订单状态。
一般做法 ,定时任务查询大于30分钟没有支付的订单,按照时间,状态去查询,5 分钟或者10分钟查询一次,然后更改状态。
Redis 可以监听 key 时效,key 时效之后推送消息,方便快速处理取消订单;
一. 配置 Redis 监听器
@Configuration
public class RedisListenerConfig{
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory){
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
return redisMessageListenerContainer;
}
}
二. key失效监听事件推送
处理 Redis 失效 key 的逻辑处理
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener{
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对 redis 数据失效事件,进行数据处理
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 拿到失效key
String expiration = message.toString();
// 这里可以做 逻辑处理
System.out.println(expiration);
}
}
总结:
Redis key 失效之后,只能拿到key值,value没有了,所以在设置key时,最好以订单唯一标识为key存储设置过期时间;
这里只是提供了一个简易的思路,这里面还需要考虑数据的持久化等一些问题;
码字不易,全靠演技