欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

2. 創(chuàng)建配置類RedisListenerConfig(配置RedisMessageListenerContainer這個(gè)Bean)

@Configuration
public class RedisListenerConfig {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    /**
     * 處理亂碼
     * @return
     */
    @Bean
    public RedisTemplate redisTemplateInit() {
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //val實(shí)例化
        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包下的實(shí)現(xiàn)類,通過繼承這個(gè)類重寫onMessage方法可以實(shí)現(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+"的訂單超時(shí)未支付,取消訂單");
 
        }
    }
}

測試

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

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

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

相關(guān)文章

  • Redis高并發(fā)場景下秒殺超賣解決方案(秒殺場景)

    Redis高并發(fā)場景下秒殺超賣解決方案(秒殺場景)

    早起的12306購票,剛被開發(fā)出來使用的時(shí)候,12306會經(jīng)常出現(xiàn)超賣 這種現(xiàn)象,也就是說車票只剩10張了,卻被20個(gè)人買到了,這種現(xiàn)象就是超賣,今天通過本文給大家介紹Redis高并發(fā)場景下秒殺超賣解決方案,感興趣的朋友一起看看吧
    2022-04-04
  • Redis批量刪除KEY的方法

    Redis批量刪除KEY的方法

    這篇文章主要介紹了Redis批量刪除KEY的方法,本文借助了Linux xargs命令實(shí)現(xiàn),需要的朋友可以參考下
    2014-11-11
  • 關(guān)于Redis中bitmap的原理和使用詳解

    關(guān)于Redis中bitmap的原理和使用詳解

    這篇文章主要介紹了關(guān)于Redis中bitmap的原理和使用詳解,BitMap即位圖,使用每個(gè)位表示某種狀態(tài),適合處理整型的海量數(shù)據(jù),本質(zhì)上是哈希表的一種應(yīng)用實(shí)現(xiàn),需要的朋友可以參考下
    2023-05-05
  • Redis 刪除策略的三種實(shí)現(xiàn)

    Redis 刪除策略的三種實(shí)現(xiàn)

    本文主要介紹了Redis 刪除策略的三種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Redis集群的關(guān)閉與重啟操作

    Redis集群的關(guān)閉與重啟操作

    這篇文章主要介紹了Redis集群的關(guān)閉與重啟操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Redis中List列表常用命令總結(jié)

    Redis中List列表常用命令總結(jié)

    Redis中的List API提供了一些操作列表的命令,這篇文章主要給大家介紹了關(guān)于Redis中List列表常用命令的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • redis的string類型及bitmap介紹

    redis的string類型及bitmap介紹

    這篇文章主要介紹了redis的string類型及bitmap介紹,redis有很多的客戶端連接進(jìn)來,站在redis所在機(jī)器的角度來說,就是有很多socket的連接
    2022-07-07
  • redis-benchmark并發(fā)壓力測試的問題解析

    redis-benchmark并發(fā)壓力測試的問題解析

    這篇文章主要介紹了redis-benchmark并發(fā)壓力測試的問題解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 在redis中存儲ndarray的示例代碼

    在redis中存儲ndarray的示例代碼

    在Redis中存儲NumPy數(shù)組(ndarray)通常需要將數(shù)組轉(zhuǎn)換為二進(jìn)制格式,然后將其存儲為字符串,這篇文章給大家介紹了在redis中存儲ndarray的示例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • 詳解redis集群的三種方式

    詳解redis集群的三種方式

    Redis三種集群方式分別是主從復(fù)制,哨兵模式,Cluster集群,這篇文章主要介紹了redis集群的三種方式,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評論