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

SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)

 更新時間:2024年12月24日 10:54:03   作者:生產(chǎn)隊的驢.  
Redis鍵過期事件是SpringBoot中常用的緩存失效通知方式,通過配置可以監(jiān)聽特定鍵的過期事件,具有一定的參考價值,感興趣的可以了解一下

介紹

Redis 鍵過期事件是 Redis 中非常有用的功能,可以在鍵過期時觸發(fā)事件通知。這對于緩存失效、會話管理、定時任務等場景非常有用。

Redis配置

Redis 默認是沒有啟用鍵過期事件通知的,你需要通過配置來啟用這個功能。可以通過修改 redis.conf 文件或者使用 CONFIG SET 命令來啟用鍵過期事件通知。

notify-keyspace-events Ex

依賴

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

配置文件

spring:
  redis:
    host: localhost
    port: 6379
    #password: 用的本機的redis,并且我沒有設置redis密碼
    database: 0
    lettuce:
      pool:
        # 最大阻塞等待時間,負數(shù)表示沒有限制
        max-wait: -1
        # 連接池中的最大空閑連接
        max-idle: 5
        # 連接池中的最小空閑連接
        min-idle: 0
        # 連接池中最大連接數(shù),負數(shù)表示沒有限制

寫入鍵

@RestController
@RequiredArgsConstructor
public class BasicController {
    private final StringRedisTemplate stringRedisTemplate;
    @GetMapping("/hello")
    public String hello() {
        // 設置鍵值對,并指定過期時間為 10 秒
        stringRedisTemplate.opsForValue().set("product:123", "dpc", Duration.ofSeconds(5));
        // 獲取值
        String str = stringRedisTemplate.opsForValue().get("name");
        System.out.println("Value: " + str);
        return str;
    }
}

配置監(jiān)聽器

@Configuration
public class RedisListenerConfig {

    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }

    @Bean
    public OrderKeyExpirationListener orderKeyExpirationListener(RedisMessageListenerContainer container) {
        // 配置監(jiān)聽器只監(jiān)聽 `order:*` 鍵
        OrderKeyExpirationListener listener = new OrderKeyExpirationListener(container);
        container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
        return listener;
    }

    @Bean
    public SessionKeyExpirationListener sessionKeyExpirationListener(RedisMessageListenerContainer container) {
        // 配置監(jiān)聽器只監(jiān)聽 `session:*` 鍵
        SessionKeyExpirationListener listener = new SessionKeyExpirationListener(container);
        container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
        return listener;
    }

    @Bean
    public ProductKeyExpirationListener productKeyExpirationListener(RedisMessageListenerContainer container) {
        // 配置監(jiān)聽器只監(jiān)聽 `product:*` 鍵
        ProductKeyExpirationListener listener = new ProductKeyExpirationListener(container);
        container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
        return listener;
    }


}

按KEY監(jiān)聽

監(jiān)聽session鍵

@Slf4j
public class SessionKeyExpirationListener extends KeyExpirationEventMessageListener {

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

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String key = message.toString();
        if (key.startsWith("session:")) {
            log.info("會話【" + key + "】已過期");
            // 處理會話超時的邏輯
        }
    }
}

監(jiān)聽product鍵

@Slf4j
public class ProductKeyExpirationListener extends KeyExpirationEventMessageListener {
    public ProductKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String key = message.toString();
        if (key.startsWith("product:")) {
            log.info("產(chǎn)品【" + key + "】已過期");
            // 處理產(chǎn)品相關的超時邏輯
        }
    }
}

監(jiān)聽order鍵

public class OrderKeyExpirationListener extends KeyExpirationEventMessageListener {

    public OrderKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String key = message.toString();
        System.out.println(123);
        if (key.startsWith("order:")) {
            // 處理訂單相關的超時邏輯
        }
    }
}

到此這篇關于SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)的文章就介紹到這了,更多相關SpringBoot 監(jiān)聽Redis過期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • C語言實現(xiàn)矩陣運算案例詳解

    C語言實現(xiàn)矩陣運算案例詳解

    這篇文章主要介紹了C語言實現(xiàn)矩陣運算案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • MyBatis多表關聯(lián)查詢的實現(xiàn)示例

    MyBatis多表關聯(lián)查詢的實現(xiàn)示例

    本文主要介紹了MyBatis多表關聯(lián)查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Springboot如何獲取上下文ApplicationContext

    Springboot如何獲取上下文ApplicationContext

    這篇文章主要介紹了Springboot如何獲取上下文ApplicationContext,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • RocketMQ生產(chǎn)者一個應用不能發(fā)送多個NameServer消息解決

    RocketMQ生產(chǎn)者一個應用不能發(fā)送多個NameServer消息解決

    這篇文章主要為大家介紹了RocketMQ生產(chǎn)者一個應用不能發(fā)送多個NameServer消息原因及解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java防止短信盜刷和轟炸的解決方案

    Java防止短信盜刷和轟炸的解決方案

    短信盜刷和短信轟炸是項目開發(fā)中必須要解決的問題之一,它的優(yōu)先級不亞于 SQL 注入的問題,今天我們就來看下,如何防止這個問題,需要的朋友可以參考下
    2024-02-02
  • mybatis-plus數(shù)據(jù)權限實現(xiàn)代碼

    mybatis-plus數(shù)據(jù)權限實現(xiàn)代碼

    這篇文章主要介紹了mybatis-plus數(shù)據(jù)權限實現(xiàn),結合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下
    2023-06-06
  • Java如何實現(xiàn)調用外部Api

    Java如何實現(xiàn)調用外部Api

    這篇文章主要介紹了Java如何實現(xiàn)調用外部Api問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于JPA實體類監(jiān)聽器@EntityListeners注解的使用實例

    基于JPA實體類監(jiān)聽器@EntityListeners注解的使用實例

    這篇文章主要介紹了JPA實體類監(jiān)聽器@EntityListeners注解的使用實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JDBC連接MySQL并實現(xiàn)模糊查詢

    JDBC連接MySQL并實現(xiàn)模糊查詢

    本文詳細講解了JDBC連接MySQL并實現(xiàn)模糊查詢的方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • javz筆記之:有趣的靜態(tài)方法的使用

    javz筆記之:有趣的靜態(tài)方法的使用

    本篇文章介紹了,java中靜態(tài)方法的使用介紹,需要的朋友參考下
    2013-04-04

最新評論