最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Redis過期事件實現(xiàn)訂單超時取消

 更新時間:2021年05月08日 14:06:50   作者:WannaRunning  
這篇文章主要介紹了基于Redis過期事件實現(xiàn)訂單超時取消,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

redis過期監(jiān)聽的實現(xiàn):

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

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

2. 創(chuàng)建配置類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創(chuàng)建redis過期事件的監(jiān)聽類

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

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer container) {
        super(container);
    }
 
    /**
     * 針對redis數(shù)據(jù)失效事件,進(jìn)行數(shù)據(jù)處理
     * @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
            //截取訂單號,查詢訂單,如果是未支付狀態(tài)則取消訂單
            String orderNo=key.substring(5);
            System.out.println("訂單號為:"+orderNo+"的訂單超時未支付,取消訂單");
 
        }
    }
}

測試

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

5秒后程序成功監(jiān)聽到了過期事件:

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

相關(guān)文章

  • 深入理解Redis BigKey

    深入理解Redis BigKey

    本文主要介紹了Redis中的BigKey問題及其處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • IDEA初次連接Redis配置的實現(xiàn)

    IDEA初次連接Redis配置的實現(xiàn)

    本文主要介紹了IDEA初次連接Redis配置的實現(xiàn),文中通過圖文步驟介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • Redis如何存儲對象與集合示例詳解

    Redis如何存儲對象與集合示例詳解

    redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希類型)本文介紹了關(guān)于Redis是如何存儲對象與集合的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • Redis查看KEY的數(shù)據(jù)類型的方法和步驟

    Redis查看KEY的數(shù)據(jù)類型的方法和步驟

    在Redis中,可以使用 TYPE 命令來查看指定key的數(shù)據(jù)類型,該命令會返回存儲在指定key中的值的數(shù)據(jù)類型,本文給大家介紹了具體的使用方法和步驟,感興趣的朋友可以參考下
    2024-04-04
  • 從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程

    從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程

    這篇文章主要介紹了從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例

    Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例

    本文主要介紹了 Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Spring?Boot?3.0x的Redis?分布式鎖的概念和原理

    Spring?Boot?3.0x的Redis?分布式鎖的概念和原理

    Redis?分布式鎖是一種基于?Redis?的分布式鎖解決方案,它的原理是利用?Redis?的原子性操作實現(xiàn)鎖的獲取和釋放,從而保證共享資源的獨占性,這篇文章主要介紹了適合?Spring?Boot?3.0x的Redis?分布式鎖,需要的朋友可以參考下
    2024-08-08
  • Redis動態(tài)字符串SDS的實現(xiàn)

    Redis動態(tài)字符串SDS的實現(xiàn)

    SDS在Redis中是實現(xiàn)字符串對象的工具,本文主要介紹了Redis動態(tài)字符串SDS的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Redis設(shè)置密碼保護(hù)的實例講解

    Redis設(shè)置密碼保護(hù)的實例講解

    今天小編就為大家分享一篇Redis設(shè)置密碼保護(hù)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解

    Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解

    這篇文章主要為大家介紹了Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評論

营口市| 开鲁县| 新蔡县| 龙江县| 翁源县| 澄城县| 阿瓦提县| 健康| 大连市| 顺义区| 永善县| 郧西县| 平阴县| 昌邑市| 邳州市| 讷河市| 沙河市| 酒泉市| 定结县| 上犹县| 囊谦县| 宜章县| 新津县| 庆云县| 商南县| 田林县| 哈尔滨市| 凤冈县| 涿州市| 宁都县| 雅江县| 玉山县| 纳雍县| 固阳县| 阜阳市| 团风县| 唐河县| 延边| 凤城市| 京山县| 旬邑县|