亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務(wù)的示例

 更新時間:2020年04月13日 11:31:49   作者:彭超  
這篇文章主要介紹了Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務(wù)的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

業(yè)務(wù)場景

我們以訂單功能為例說明下:

生成訂單后一段時間不支付訂單會自動關(guān)閉。最簡單的想法是設(shè)置定時任務(wù)輪詢,但是每個訂單的創(chuàng)建時間不一樣,定時任務(wù)的規(guī)則無法設(shè)定,如果將定時任務(wù)執(zhí)行的間隔設(shè)置的過短,太影響效率。

還有一種想法,在用戶進入訂單界面的時候,判斷時間執(zhí)行相關(guān)操作。方式可能有很多,在這里介紹一種監(jiān)聽 Redis 鍵值對過期時間來實現(xiàn)訂單自動關(guān)閉。

實現(xiàn)思路

在生成訂單時,向 Redis 中增加一個 KV 鍵值對,K 為訂單號,保證通過 K 能定位到數(shù)據(jù)庫中的某個訂單即可,V 可為任意值。

假設(shè),生成訂單時向 Redis 中存放 K 為訂單號,V 也為訂單號的鍵值對,并設(shè)置過期時間為 30 分鐘,如果該鍵值對在 30 分鐘過期后能夠發(fā)送給程序一個通知,或者執(zhí)行一個方法,那么即可解決訂單關(guān)閉問題。

實現(xiàn):通過監(jiān)聽 Redis 提供的過期隊列來實現(xiàn),監(jiān)聽過期隊列后,如果 Redis 中某一個 KV 鍵值對過期了,那么將向監(jiān)聽者發(fā)送消息,監(jiān)聽者可以獲取到該鍵值對的 K,注意,是獲取不到 V 的,因為已經(jīng)過期了,這就是上面所提到的,為什么要保證能通過 K 來定位到訂單,而 V 為任意值即可。拿到 K 后,通過 K 定位訂單,并判斷其狀態(tài),如果是未支付,更新為關(guān)閉,或者取消狀態(tài)即可。

開啟 Redis key 過期提醒

修改 redis 相關(guān)事件配置。找到 redis 配置文件 redis.conf,查看 notify-keyspace-events 配置項,如果沒有,添加 notify-keyspace-events Ex,如果有值,則追加 Ex,相關(guān)參數(shù)說明如下:

  • K:keyspace 事件,事件以 keyspace@ 為前綴進行發(fā)布
  • E:keyevent 事件,事件以 keyevent@ 為前綴進行發(fā)布
  • g:一般性的,非特定類型的命令,比如del,expire,rename等
  • $:字符串特定命令
  • l:列表特定命令
  • s:集合特定命令
  • h:哈希特定命令
  • z:有序集合特定命令
  • x:過期事件,當某個鍵過期并刪除時會產(chǎn)生該事件
  • e:驅(qū)逐事件,當某個鍵因 maxmemore 策略而被刪除時,產(chǎn)生該事件
  • A:g$lshzxe的別名,因此”AKE”意味著所有事件

引入依賴

在 pom.xml 中添加 org.springframework.boot:spring-boot-starter-data-redis 依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

相關(guān)配置

定義配置 RedisListenerConfig 實現(xiàn)監(jiān)聽 Redis key 過期時間

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

@Configuration
public class RedisListenerConfig {

  @Bean
  RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    return container;
  }
}

定義監(jiān)聽器 RedisKeyExpirationListener,實現(xiàn) KeyExpirationEventMessageListener 接口,查看源碼發(fā)現(xiàn),該接口監(jiān)聽所有 db 的過期事件 keyevent@*:expired"

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

/**
 * 監(jiān)聽所有db的過期事件__keyevent@*__:expired"
 */
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

  public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
    super(listenerContainer);
  }

  /**
   * 針對 redis 數(shù)據(jù)失效事件,進行數(shù)據(jù)處理
   * @param message
   * @param pattern
   */
  @Override
  public void onMessage(Message message, byte[] pattern) {

    // 獲取到失效的 key,進行取消訂單業(yè)務(wù)處理
    String expiredKey = message.toString();
    System.out.println(expiredKey);
  }
}

到此這篇關(guān)于Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務(wù)的示例的文章就介紹到這了,更多相關(guān)Spring Boot Redis Key失效 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java顯示目錄文件列表和刪除目錄功能

    java顯示目錄文件列表和刪除目錄功能

    這篇文章主要介紹了java顯示目錄文件列表和刪除目錄功能,文章通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2017-12-12
  • springboot?去掉netflix?禁用Eureka的解決方法

    springboot?去掉netflix?禁用Eureka的解決方法

    這篇文章主要介紹了springboot?去掉netflix?禁用Eureka的解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    當服務(wù)器QPS比較高,并且對數(shù)據(jù)的實時性要求不高時,往往會接入緩存以達到快速Response、降低數(shù)據(jù)庫壓力的作用,常用來做緩存的中間件如Redis等。本文主要介紹了JAVA面試時??嫉木彺鎿舸⒋┩?、雪崩場景三者區(qū)別,有興趣的小伙伴可以看一下
    2021-11-11
  • Nacos單機版安裝啟動的全流程

    Nacos單機版安裝啟動的全流程

    這篇文章主要介紹了Nacos單機版安裝啟動的全流程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java elasticSearch-api的具體操作步驟講解

    Java elasticSearch-api的具體操作步驟講解

    這篇文章主要介紹了elasticSearch-api的具體操作步驟講解,本文通過詳細的步驟介紹和圖文代碼展示講解了該項技術(shù),需要的朋友可以參考下
    2021-06-06
  • sftp和ftp 根據(jù)配置遠程服務(wù)器地址下載文件到當前服務(wù)

    sftp和ftp 根據(jù)配置遠程服務(wù)器地址下載文件到當前服務(wù)

    這篇文章主要介紹了sftp和ftp 根據(jù)配置遠程服務(wù)器地址下載文件到當前服務(wù)的相關(guān)資料本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • 深入了解java NIO之Selector(選擇器)

    深入了解java NIO之Selector(選擇器)

    這篇文章主要介紹了java NIO之Selector(選擇器)的相關(guān)資料,文中講解非常詳細,實例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Spring標準的xml文件頭實例分析

    Spring標準的xml文件頭實例分析

    這篇文章主要介紹了Spring標準的xml文件頭實例分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java的內(nèi)存泄漏和性能瓶頸解讀

    Java的內(nèi)存泄漏和性能瓶頸解讀

    這篇文章主要介紹了Java的內(nèi)存泄漏和性能瓶頸,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Springboot中的默認日志框架配置詳解

    Springboot中的默認日志框架配置詳解

    這篇文章主要介紹了Springboot中的默認日志框架配置詳解,spring boot日志默認會輸出到控制臺,所以并不需要我們做過多配置,但不過不喜歡控制臺默認日志格式,則可以使用logging.pattern.console屬性配置,需要的朋友可以參考下
    2023-09-09

最新評論