上一篇 <<<Redis的事務(wù)操作(Mult和Watch)知識(shí)點(diǎn)
下一篇 >>>Redis實(shí)現(xiàn)分布式鎖的原理分析
下單30分鐘未支付則自動(dòng)更改訂單狀態(tài)的方案有哪些稠鼻?
1伤极、使用定時(shí)任務(wù)輪詢查詢數(shù)據(jù)庫的狀態(tài)
2、設(shè)置redis的key有效期移斩,接收過期時(shí)收到的通知進(jìn)行處理
3上真、利用zookeeper的臨時(shí)節(jié)點(diǎn)過期機(jī)制【在zookeeper章節(jié)會(huì)補(bǔ)充上來】
redis的過期相關(guān)代碼
1. 業(yè)務(wù)設(shè)置key的過期時(shí)間
/**
* 使用redis咬腋,設(shè)置有效期
*/
@RequestMapping("/saveOrder")
public String saveOrder() {
// 1.生成token
String orderToken = UUID.randomUUID().toString();
String orderId = System.currentTimeMillis() + "";
//2. 將該token存放到redis中,并設(shè)置過期時(shí)間
redisUtils.setString(orderToken, orderId, 5L);
OrderEntity orderEntity = new OrderEntity(null, "迦葉訂單", orderId, orderToken);
int result = orderMapper.insertOrder(orderEntity);
return result > 0 ? "success" : "fail";
}
2. 設(shè)置監(jiān)聽的bean配置
/**
* 配置redis監(jiān)聽bean
*/
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
3. redis的key過期具體處理代碼
/**
* 訂閱監(jiān)聽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();
// 根據(jù)key查詢 value 如果還還是為待支付狀態(tài) 將訂單改為已經(jīng)超時(shí)~~
OrderEntity orderNumber = orderMapper.getOrderNumber(expireKey);
if (orderNumber == null) {
return;
}
if (orderNumber.getOrderStatus().equals(0)) {
// 將訂單狀態(tài)改為已經(jīng)失效
orderMapper.updateOrderStatus(expireKey, 2);
}
}
}
推薦閱讀:
<<<分布式緩存與本地緩存的區(qū)別
<<<Ehcache基礎(chǔ)知識(shí)
<<<SpringBoot整合Ehcache
<<<Redis的5種數(shù)據(jù)類型
<<<Redis存放實(shí)體對象的方式及區(qū)別
<<<Redis的應(yīng)用場景匯總
<<<Redis高效及線程安全的真正原因
<<<Redis為啥要分為16個(gè)庫
<<<RDB和AOF持久化方式的區(qū)別
<<<Redis與數(shù)據(jù)庫的一致性解決方案
<<<SpringBoot整合Redis的注解版本完成數(shù)據(jù)緩存
<<<Redis的淘汰策略
<<<Redis的事務(wù)操作(Mult和Watch)知識(shí)點(diǎn)
<<<Redis實(shí)現(xiàn)分布式鎖的原理分析
<<<Redis分布式鎖的實(shí)現(xiàn)代碼示例
<<<使用Redisson工具實(shí)現(xiàn)分布式鎖
<<<Redis集群模式之主從復(fù)制原理及存在的缺陷
<<<Redis集群模式之哨兵模式
<<<Redis集群模式之Cluster去中心化分片集群
<<<Linux環(huán)境下安裝單機(jī)Redis
<<<Redis Cluster集群環(huán)境搭建
<<<Redis Cluster如何動(dòng)態(tài)擴(kuò)容與縮容
<<<Redis Cluster主從節(jié)點(diǎn)自動(dòng)切換
<<<Redis集群模式的類型和缺陷匯總
<<<Redis緩存的穿透睡互、擊穿和雪崩效應(yīng)
<<<Redis解決穿透擊穿問題時(shí)使用的布隆過濾器知識(shí)點(diǎn)
<<<Redis與MySQL的數(shù)據(jù)同步解決方案
<<<阿里云的Canal框架實(shí)現(xiàn)Redis與Mysql同步原理及代碼示例
<<<阿里云的Canal框架配置
<<<Redis官方提出的redlock分布式鎖
<<<Redis的調(diào)優(yōu)設(shè)置
<<<Redis常見問題匯總