好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 基于Redis過期事件實現訂單超時取消

基于Redis過期事件實現訂單超時取消

熱門標簽:十堰營銷電銷機器人哪家便宜 鄭州人工智能電銷機器人系統 魔獸2青云地圖標注 超呼電話機器人 貴州電銷卡外呼系統 北京400電話辦理收費標準 日本中國地圖標注 山東外呼銷售系統招商 宿遷便宜外呼系統平臺

訂單超時取消的實現,首先想到的是定時任務,但是這種實現方式在訂單量較大的情況下是有問題的,而且時間也會有誤差,最大時間差就是定時任務的執行間隔時間。

使用redis的過期監聽事件可以比較好的解決這個問題。實現的方式是訂單創建后向redus中存一記錄,一般就以訂單號為key。設置過期時間(訂單超時時間),一旦時間超時會觸發監聽事件,這時候就可以通過key判斷這個訂單是否支付,未支付時取消訂單。

redis過期監聽的實現:

1.修改redis.windows.conf配置文件中notify-keyspace-events的值

默認配置notify-keyspace-events的值為" ",修改為 notify-keyspace-events Ex 這樣便開啟了過期事件

2. 創建配置類RedisListenerConfig(配置RedisMessageListenerContainer這個Bean)

@Configuration
public class RedisListenerConfig {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    /**
     * 處理亂碼
     * @return
     */
    @Bean
    public RedisTemplate redisTemplateInit() {
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //val實例化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
 
        return redisTemplate;
    }
 
 
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
 
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
 
}

3.繼承KeyExpirationEventMessageListener創建redis過期事件的監聽類

KeyExpirationEventMessageListener類是org.springframework.data.redis.listener包下的實現類,通過繼承這個類重寫onMessage方法可以實現對redis所有過期事件的監聽。

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer container) {
        super(container);
    }
 
    /**
     * 針對redis數據失效事件,進行數據處理
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
       String key=message.toString();//生效的key
        if (key!=null  key.startsWith("order")){//從失效key中篩選代表訂單失效的key
            //截取訂單號,查詢訂單,如果是未支付狀態則取消訂單
            String orderNo=key.substring(5);
            System.out.println("訂單號為:"+orderNo+"的訂單超時未支付,取消訂單");
 
        }
    }
}

測試

通過redis模擬創建一個有效時間為5s的訂單:

5秒后程序成功監聽到了過期事件:

到此這篇關于基于Redis過期事件實現訂單超時取消的文章就介紹到這了,更多相關Redis 訂單超時取消內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Redis實現訂單自動過期功能的示例代碼
  • Redis中的String類型及使用Redis解決訂單秒殺超賣問題
  • 使用PHP+Redis實現延遲任務,實現自動取消訂單功能
  • PHP實現電商訂單自動確認收貨redis隊列

標簽:大慶 北京 江蘇 臺州 楊凌 吉安 朝陽 果洛

巨人網絡通訊聲明:本文標題《基于Redis過期事件實現訂單超時取消》,本文關鍵詞  基于,Redis,過期,事件,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于Redis過期事件實現訂單超時取消》相關的同類信息!
  • 本頁收集關于基于Redis過期事件實現訂單超時取消的相關信息資訊供網民參考!
  • 推薦文章