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

redis開啟過期監(jiān)聽的實現(xiàn)示例

 更新時間:2025年11月18日 10:05:37   作者:百***2714  
在Java項目中使用Redis的過期監(jiān)聽功能來實現(xiàn)訂單未付款到期自動取消,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

java項目中,場景:訂單沒有付款到期取消訂單,使用的是redis過期監(jiān)聽來做的,做個筆記!首先使用該功能需要下載2.8.0及以上的版本,這一部分詳細內(nèi)容可以訪問redis官網(wǎng):http://redis.io/topics/notifications ,以下是我總結的:

第一步:配置redis的過期失效監(jiān)聽,需要修改redis.conf配置文件,找到 EVENT NOTIFICATION (事件通知)這個配置
notify-keyspace-events "" 修改為 notify-keyspace-events "Ex"

參數(shù)解釋,看配置文件或者官網(wǎng)都有詳細解釋,如下:

############################# EVENT NOTIFICATION ##############################

# 鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 數(shù)據(jù)集的事件。
# 因為開啟鍵空間通知功能需要消耗一些 CPU ,所以在默認配置下,該功能處于關閉狀態(tài)。
# notify-keyspace-events 的參數(shù)可以是以下字符的任意組合,
# 它指定了服務器該發(fā)送哪些類型的通知:
# K 鍵空間通知,所有通知以 __keyspace@__ 為前綴
# E 鍵事件通知,所有通知以 __keyevent@__ 為前綴
# g DEL 、 EXPIRE 、 RENAME 等類型無關的通用命令的通知
# $ 字符串命令的通知
# l 列表命令的通知
# s 集合命令的通知
# h 哈希命令的通知
# z 有序集合命令的通知
# x 過期事件:每當有過期鍵被刪除時發(fā)送
# e 驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時發(fā)送
# A 參數(shù) g$lshzxe 的別名
# 輸入的參數(shù)中至少要有一個 K 或者 E,否則的話,不管其余的參數(shù)是什么,都不會有任何 通知被分發(fā)。

第二步: 重新啟動redis,沒什么好說的,修改配置文件以及啟動redis不會自行度娘

第三步:驗證配置是否成功

  1. 運行redis客戶端:
    redis-cli
  2. 選擇你要監(jiān)聽的庫 @后面的值,redis默認連接0號庫,這里不做修改了,運行監(jiān)聽命令:
    psubscribe __keyevent@0__:expired
  3. 在啟動一個客戶端redis-cli,這里也是默認0號庫,不做修改,設置一個10秒過期的key:
    SETEX mykey 10 redis
    拓展:Redis Setex 命令為指定的 key 設置值及其過期時間。如果 key 已經(jīng)存在, SETEX 命令將會替換舊的值。
  4. 10秒后,可以看到監(jiān)聽端口可以接收到失效的redis的key。如圖

springboot 項目集成ridis配置過期監(jiān)聽:

1.引入redis依賴,這塊不做過多解釋,不會的去搜集成reids

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

2.創(chuàng)建兩個類,第一個類配置 RedisListenerConfig 實現(xiàn)監(jiān)聽 Redis key 過期時間,我這里是監(jiān)聽所有db的過期事件__keyevent@*__:expired,根據(jù)自己的業(yè)務需求自行配置,@幾號庫,@*是所有
RedisListenerConfig:

import org.springframework.beans.factory.annotation.Autowired;
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.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

/**
 * @ClassName RedisListenerConfig
 * @Description redis監(jiān)聽配置
 * @Author cl
 * @Date 2021-09-09 10:45
 */
@Configuration
public class RedisListenerConfig {
    @Autowired
    RedisListen redisListen;

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory factory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        container.addMessageListener(redisListen, new PatternTopic("__keyevent@*__:expired"));
        return container;
    }
}

第二個類,定義監(jiān)聽器 RedisListen,監(jiān)聽 Redis key 過期事件,針對 Redis 數(shù)據(jù)失效事件,進行業(yè)務處理
RedisListen:

import com.tanghe.common.constant.RedisConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;

/**
 * @ClassName RedisListen
 * @Description RedisListen
 * @Author cl
 * @Date 2021-09-09 10:46
 */
@Slf4j
@Component
public class RedisListen implements MessageListener {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();

        log.info("失效的redis是:"+expiredKey);
        RedisSerializer<?> serializer = redisTemplate.getValueSerializer();
        String channel = String.valueOf(serializer.deserialize(message.getChannel()));
        String body = String.valueOf(serializer.deserialize(message.getBody()));
        log.info("channel==="+channel+"-----------------"+"body === "+body);
        //key過期監(jiān)聽,在處理業(yè)務之前校驗下自己業(yè)務的key和監(jiān)聽的key以及庫號
        if("__keyevent@0__:expired".equals(channel) && body.indexOf(“自己業(yè)務的key”) != -1){
            log.info("進來了哈");
            //這里寫需要處理的業(yè)務

        }

    }
}

附redis常用指令,會持續(xù)更新!?。?/h2>

windows

redis設置開機自啟動:redis-server --service-install redis.windows-service.conf --loglevel verbose
redis啟動命令:redis-server redis.windows.conf
redis卸載命令:redis-server --service-uninstall
redis啟動服務命令:redis-server --service-start
redis停止服務命令:redis-server --service-stop
進入redis命令:redis-cli.exe -h 127.0.0.1 -p 6379
進入redis使用密碼命令:redis-cli.exe -h 127.0.0.1 -p 6379 -a password

到此這篇關于redis開啟過期監(jiān)聽的實現(xiàn)示例的文章就介紹到這了,更多相關redis開啟過期監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 配置redis的序列化,注入RedisTemplate方式

    配置redis的序列化,注入RedisTemplate方式

    這篇文章主要介紹了配置redis的序列化,注入RedisTemplate方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Redis緩存常用4種策略原理詳解

    Redis緩存常用4種策略原理詳解

    這篇文章主要介紹了Redis緩存常用4種策略原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Redis批量查詢的四種方式詳解

    Redis批量查詢的四種方式詳解

    在高并發(fā)場景下,巧妙地利用緩存批量查詢技巧能夠顯著提高系統(tǒng)性能,熟練掌握細粒度的緩存使用是每位架構師必備的技能,因此,在本文中,我們將深入探討 Redis 中批量查詢的一些技巧,希望能夠給你帶來一些啟發(fā),需要的朋友可以參考下
    2025-10-10
  • Redis分布式鎖的7種實現(xiàn)

    Redis分布式鎖的7種實現(xiàn)

    這篇文章主要介紹了Redis分布式鎖的實現(xiàn)
    2022-04-04
  • 控制Redis的hash的field中的過期時間

    控制Redis的hash的field中的過期時間

    這篇文章主要介紹了控制Redis的hash的field中的過期時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用JMeter插件Redis Data Set如何實現(xiàn)高性能數(shù)據(jù)驅動測試

    使用JMeter插件Redis Data Set如何實現(xiàn)高性能數(shù)據(jù)驅動測試

    RedisDataSet插件是JMeter的一個插件,可以實現(xiàn)從Redis中動態(tài)加載數(shù)據(jù),并將其用作測試參數(shù),本文詳細介紹如何在JMeter中使用RedisDataSet插件,幫助你實現(xiàn)高效的數(shù)據(jù)驅動測試
    2025-01-01
  • redis在Windows中下載及安裝、設置教程

    redis在Windows中下載及安裝、設置教程

    這篇文章主要介紹了Windows中redis的下載及安裝、設置教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法

    kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Centos7 Redis主從搭建配置的實現(xiàn)

    Centos7 Redis主從搭建配置的實現(xiàn)

    這篇文章主要介紹了Centos7 Redis主從搭建配置的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Redis 存取 JSON 數(shù)據(jù)示例操作

    Redis 存取 JSON 數(shù)據(jù)示例操作

    JSON 是我們常用的數(shù)據(jù)類型,當我們需要在Redis中保存json數(shù)據(jù)時是怎么存放的呢?一般是用String或者Hash,但還是不太方便,無法靈活的操作json 數(shù)據(jù),下面通過本文給大家介紹Redis存取JSON 數(shù)據(jù)示例操作,感興趣的的朋友一起看看吧
    2024-02-02

最新評論