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

redis過期監(jiān)聽機制方式

 更新時間:2024年05月27日 09:48:49   作者:老王的日常  
這篇文章主要介紹了redis過期監(jiān)聽機制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.修改配置

1.打開conf/redis.conf 文件,取消注釋:notify-keyspace-events Ex

2.重啟redis

3.如果設置了密碼需要重置密碼:config set requirepass ****

4.驗證配置是否生效

  • 步驟一:進入redis客戶端:redis-cli
  • 步驟二:執(zhí)行 CONFIG GET notify-keyspace-events ,如果有返回值證明配置成功,如果沒有執(zhí)行步驟三
  • 步驟三:執(zhí)行CONFIG SET notify-keyspace-events "Ex",再查看步驟二是否有值

注意:重置密碼和重置配置是否每次重啟redis都需要重新設置看個人需要。

2.redis在yam中的配置

spring:
  redis:
    database: 0
    host: ip
    port: 6379
    password: ***
    #超時時間:單位ms
    timeout: 60000
    pool:
      #最大空閑數:空閑鏈接數大于maxIdle時,將進行回收
      max-idle: 8
      #最小空閑數:低于minIdle時,將創(chuàng)建新的鏈接
      min-idle: 1
      #最大連接數:能夠同時建立的“最大鏈接個數”
      max-active: 20
      #最大等待時間:單位ms
      max-wait: 120000
    lettuce:
      cluster:
        refresh:
          adaptive: true
          period: 20

3.代碼實現(xiàn)

3.1.redis的連接配置

package com.gf.ecrm.redislistenerconfig;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPoolConfig;
 
import javax.annotation.PostConstruct;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Component
@Slf4j
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String hostName;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String passWord;
    @Value("${spring.redis.pool.max-idle}")
    private int maxIdl;
    @Value("${spring.redis.pool.min-idle}")
    private int minIdl;
    @Value("${spring.redis.timeout}")
    private int timeout;
 
    private int defaultDb;
    private List<Integer> dbs=Arrays.asList(0,1);
 
 
    public static Map<Integer, RedisTemplate<Serializable, Object>> redisTemplateMap = new HashMap<>();
 
    @PostConstruct
    public void initRedisTemp() throws Exception {
        log.info("###### START 初始化 Redis 連接池 START ######");
        defaultDb = dbs.get(0);
        for (Integer db : dbs) {
            log.info("###### 正在加載Redis-db-" + db+ " ######");
            redisTemplateMap.put(db, redisTemplateObject(db));
        }
        log.info("###### END 初始化 Redis 連接池 END ######");
    }
 
    public RedisTemplate<Serializable, Object> redisTemplateObject(Integer dbIndex) throws Exception {
        RedisTemplate<Serializable, Object> redisTemplateObject = new RedisTemplate<Serializable, Object>();
        redisTemplateObject.setConnectionFactory(redisConnectionFactory(jedisPoolConfig(), dbIndex));
        setSerializer(redisTemplateObject);
        redisTemplateObject.afterPropertiesSet();
        return redisTemplateObject;
    }
 
    /**
     * 連接池配置信息
     *
     * @return
     */
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 最大連接數
        poolConfig.setMaxIdle(maxIdl);
        // 最小空閑連接數
        poolConfig.setMinIdle(minIdl);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);
        poolConfig.setNumTestsPerEvictionRun(10);
        poolConfig.setTimeBetweenEvictionRunsMillis(60000);
        // 當池內沒有可用的連接時,最大等待時間
        poolConfig.setMaxWaitMillis(timeout);
        return poolConfig;
    }
 
    /**
     * jedis連接工廠
     *
     * @param jedisPoolConfig
     * @return
     */
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig, int db) {
        // 單機版jedis
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        // 設置redis服務器的host或者ip地址
        redisStandaloneConfiguration.setHostName(hostName);
        // 設置默認使用的數據庫
        redisStandaloneConfiguration.setDatabase(db);
        // 設置密碼
        redisStandaloneConfiguration.setPassword(RedisPassword.of(passWord));
        // 設置redis的服務的端口號
        redisStandaloneConfiguration.setPort(port);
 
        // 獲得默認的連接池構造器
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
                .builder();
        // 指定jedisPoolConifig來修改默認的連接池構造器
        jpcb.poolConfig(jedisPoolConfig);
        // 通過構造器來構造jedis客戶端配置
        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
        // 單機配置 + 客戶端配置 = jedis連接工廠
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }
 
    private void setSerializer(RedisTemplate<Serializable, Object> template) {
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    }
 
 
    public RedisTemplate<Serializable, Object> getRedisTemplateByDb(int db){
        return redisTemplateMap.get(db);
    }
 
    public RedisTemplate<Serializable, Object> getRedisTemplate(){
        return redisTemplateMap.get(defaultDb);
    }
 
}

3.2.redis的監(jiān)聽conf

package com.gf.ecrm.redislistenerconfig;

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;

import javax.annotation.Resource;

@Configuration
public class RedisListenerConfig {

    @Resource
    private RedisConnectionFactory redisConnectionFactory;
    @Resource
    private RedisKeyExpirationListener redisExpiredListener;

    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
        //監(jiān)聽所有key的過期事件
        redisMessageListenerContainer.addMessageListener(redisExpiredListener, redisExpiredListener.getTopic());
        return redisMessageListenerContainer;
    }

}

3.3.監(jiān)聽業(yè)務代碼

package com.gf.ecrm.redislistenerconfig;

import lombok.Data;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.stereotype.Component;

@Data
@Component
public class RedisKeyExpirationListener implements MessageListener {
    //監(jiān)聽的主題(只監(jiān)聽redis數據庫1,如果要監(jiān)聽redis所有的庫,把1替換為*)
    public final PatternTopic topic = new PatternTopic("__keyevent@1__:expired");

    /**
     * Redis失效事件 key
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiraKey = message.toString();
        System.out.println(expiraKey);

    }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Redis常用的數據結構及實際應用場景

    Redis常用的數據結構及實際應用場景

    本文介紹了Redis中常用的數據結構,包括字符串、列表、集合、哈希表、有序集合和Bitmap,并詳細說明了它們在各種場景下的使用,需要的朋友可以參考下
    2024-05-05
  • RedisTemplate集成+封裝RedisUtil過程

    RedisTemplate集成+封裝RedisUtil過程

    本文介紹了如何搭建一個多模塊的Redis項目,包括項目搭建、配置和測試,通過使用父項目管理多個子模塊,可以實現(xiàn)單點構建、統(tǒng)一版本管理和清晰的項目結構,文章還提供了在Spring Boot項目中集成RedisTemplate的示例,并解決了編碼問題
    2024-12-12
  • Redis SETEX命令實現(xiàn)鍵值對管理

    Redis SETEX命令實現(xiàn)鍵值對管理

    本文主要介紹了Redis SETEX命令實現(xiàn)鍵值對管理,SETEX命令用于設置具有過期時間的鍵值對,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Redis實現(xiàn)集群搭建+集群讀寫的示例

    Redis實現(xiàn)集群搭建+集群讀寫的示例

    本文介紹了Redis集群的搭建和讀寫操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • Redis連接錯誤的情況總結分析

    Redis連接錯誤的情況總結分析

    這篇文章主要給大家總結介紹了關于Redis連接錯誤的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • 一篇文章帶你弄清楚Redis的精髓

    一篇文章帶你弄清楚Redis的精髓

    Redis是一個開源的、支持網絡、基于內存的鍵值對存儲系統(tǒng),它可以用作數據庫、緩存和消息中間件。它支持多種數據類型,包括字符串、散列、列表、集合、位圖等,擁有極快的讀寫速度,并且支持豐富的特性,如事務、持久化、復制、腳本、發(fā)布/訂閱等。
    2023-02-02
  • Redis RDB與AOF持久化方式詳細講解

    Redis RDB與AOF持久化方式詳細講解

    Redis是基于內存的數據結構服務器,保存了大量的鍵值對數據,所以持久化到磁盤是非常必要的,Redis提供了兩種持久化的方式,分別是RDB和AOF。下面我們看下這兩種持久化方式的具體實現(xiàn)原理
    2022-11-11
  • 使用Redis實現(xiàn)實時排行榜的示例

    使用Redis實現(xiàn)實時排行榜的示例

    為了實現(xiàn)一個實時排行榜系統(tǒng),我們可以使用Redis的有序集合,本文主要介紹了使用Redis實現(xiàn)實時排行榜的示例,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • gem install redis報錯的解決方案

    gem install redis報錯的解決方案

    今天小編就為大家分享一篇關于gem install redis報錯的解決方案,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Redis整合Spring結合使用緩存實例

    Redis整合Spring結合使用緩存實例

    這篇文章主要介紹了Redis整合Spring結合使用緩存實例,介紹了如何在Spring中配置redis,并通過Spring中AOP的思想,將緩存的方法切入到有需要進入緩存的類或方法前面。需要的朋友可以參考下
    2015-12-12

最新評論