上一篇 <<<Redis的事务操作(Mult和Watch)知识点
下一篇 >>>Redis实现分布式锁的原理分析
下单30分钟未支付则自动更改订单状态的方案有哪些?
1、使用定时任务轮询查询数据库的状态
2、设置redis的key有效期,接收过期时收到的通知进行处理
3、利用zookeeper的临时节点过期机制【在zookeeper章节会补充上来】
redis的过期相关代码
1. 业务设置key的过期时间
/**
* 使用redis,设置有效期
*/
@RequestMapping("/saveOrder")
public String saveOrder() {
// 1.生成token
String orderToken = UUID.randomUUID().toString();
String orderId = System.currentTimeMillis() + "";
//2. 将该token存放到redis中,并设置过期时间
redisUtils.setString(orderToken, orderId, 5L);
OrderEntity orderEntity = new OrderEntity(null, "迦叶订单", orderId, orderToken);
int result = orderMapper.insertOrder(orderEntity);
return result > 0 ? "success" : "fail";
}
2. 设置监听的bean配置
/**
* 配置redis监听bean
*/
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
3. redis的key过期具体处理代码
/**
* 订阅监听onMessage
*/
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Autowired
private OrderMapper orderMapper;
@Override
public void onMessage(Message message, byte[] pattern) {
String expireKey = message.toString();
// 根据key查询 value 如果还还是为待支付状态 将订单改为已经超时~~
OrderEntity orderNumber = orderMapper.getOrderNumber(expireKey);
if (orderNumber == null) {
return;
}
if (orderNumber.getOrderStatus().equals(0)) {
// 将订单状态改为已经失效
orderMapper.updateOrderStatus(expireKey, 2);
}
}
}
推荐阅读:
<<<分布式缓存与本地缓存的区别
<<<Ehcache基础知识
<<<SpringBoot整合Ehcache
<<<Redis的5种数据类型
<<<Redis存放实体对象的方式及区别
<<<Redis的应用场景汇总
<<<Redis高效及线程安全的真正原因
<<<Redis为啥要分为16个库
<<<RDB和AOF持久化方式的区别
<<<Redis与数据库的一致性解决方案
<<<SpringBoot整合Redis的注解版本完成数据缓存
<<<Redis的淘汰策略
<<<Redis的事务操作(Mult和Watch)知识点
<<<Redis实现分布式锁的原理分析
<<<Redis分布式锁的实现代码示例
<<<使用Redisson工具实现分布式锁
<<<Redis集群模式之主从复制原理及存在的缺陷
<<<Redis集群模式之哨兵模式
<<<Redis集群模式之Cluster去中心化分片集群
<<<Linux环境下安装单机Redis
<<<Redis Cluster集群环境搭建
<<<Redis Cluster如何动态扩容与缩容
<<<Redis Cluster主从节点自动切换
<<<Redis集群模式的类型和缺陷汇总
<<<Redis缓存的穿透、击穿和雪崩效应
<<<Redis解决穿透击穿问题时使用的布隆过滤器知识点
<<<Redis与MySQL的数据同步解决方案
<<<阿里云的Canal框架实现Redis与Mysql同步原理及代码示例
<<<阿里云的Canal框架配置
<<<Redis官方提出的redlock分布式锁
<<<Redis的调优设置
<<<Redis常见问题汇总