redis主键过期监听
redis主键过期监听,本质就是使用redis的消息推送
编辑redis 配置文件 ,修改为 notify-keyspace-events "Ex"
注册 RedisMessageListenerContainer ,为Redis消息侦听器提供异步行为的容器
容器是必须的
//创建监听时会检查容器是否存在
public KeyspaceEventMessageListener(RedisMessageListenerContainer listenerContainer) {
Assert.notNull(listenerContainer, "RedisMessageListenerContainer to run in must not be null!");
this.listenerContainer = listenerContainer;
}
@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
//创建监听,继承KeyExpirationEventMessageListener ,重写onMessage方法
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Autowired
private OrderItemService orderItemService;
private static Logger log = LoggerFactory.getLogger(RedisKeyExpirationListener.class);
@Override
public void onMessage(Message message, byte[] pattern) {
//在这里处理业务,因为时键过期,所以只能拿到键值,不能拿到value
String expiredKey = message.toString();
log.info("Redis主键过期监听" + expiredKey);
if (expiredKey.startsWith("order:")) {
log.info("Redis主键过期监听符合要求的主键" + expiredKey);
//Todo取消订单
orderItemService.updateCannelOrderByTimeOut(expiredKey);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下