Springboot redis 失效監聽

Springboot redis 失效監聽

  • 開啓redis key過期提醒

    • 在redis的redis.conf 開啓過期監聽
      notify-keyspace-events Ex
      
      	#相關說明
      	K:keyspace事件,事件以__keyspace@<db>__爲前綴進行發佈;         
      	E:keyevent事件,事件以__keyevent@<db>__爲前綴進行發佈;         
      	g:一般性的,非特定類型的命令,比如del,expire,rename等;        
      	$:字符串特定命令;         
      	l:列表特定命令;         
      	s:集合特定命令;         
      	h:哈希特定命令;         
      	z:有序集合特定命令;         
      	x:過期事件,當某個鍵過期並刪除時會產生該事件;         
      	e:驅逐事件,當某個鍵因maxmemore策略而被刪除時,產生該事件;         
      	A:g$lshzxe的別名,因此”AKE”意味着所有事件。
      
    • 設置完成,進行redis 重啓,使其加載最新的配置
  • 添加引用的依賴

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    
  • 添加redis消息過期監聽

    • 給Springboot 配置 redis監聽,配置redis消息監聽容器,並給與連接工廠
      
      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;
      
      /**
      * @program: swpt
      * @description:
      * @author: fq
      * @create: 2020-11-19 09:41
      **/
      @Configuration
      public class RedisListenerConfig {
      
          @Bean
          RedisMessageListenerContainer container (RedisConnectionFactory redisConnectionFactory){
              RedisMessageListenerContainer container = new RedisMessageListenerContainer();
              container.setConnectionFactory(redisConnectionFactory);
              return container;
          }
      }
      
    • 定義redis監聽器並且實現KeyExpirationEventMessageListener接口,在spring 啓動的時候進行註冊
      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;
      
      /**
      * @program: swpt
      * @description:
      * @author: fq
      * @create: 2020-11-19 09:50
      **/
      @Component
      public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
      
          public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
              super(listenerContainer);
          }
      
      
          /**
          * 針對redis數據失效事件,進行數據處理
          * @param message
          * @param pattern
          */
          @Override
          public void onMessage(Message message, byte[] pattern) {
              //message.toString()就是失效的redis的key
              String expiredKey = message.toString();
              System.out.println("redis失效監聽" + expiredKey);
          }
      
      }
      
  • 在redis 客戶端寫一個10秒的 key 查看代碼是否監聽到

    • 客戶端創建20秒的key
      setex name 20 "哈哈"
      
    • 在idea 進行查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章