最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1.修改配置

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

2.重啟redis

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

4.驗(yàn)證配置是否生效

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

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

2.redis在yam中的配置

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

3.代碼實(shí)現(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();
        // 最大連接數(shù)
        poolConfig.setMaxIdle(maxIdl);
        // 最小空閑連接數(shù)
        poolConfig.setMinIdle(minIdl);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);
        poolConfig.setNumTestsPerEvictionRun(10);
        poolConfig.setTimeBetweenEvictionRunsMillis(60000);
        // 當(dāng)池內(nèi)沒有可用的連接時(shí),最大等待時(shí)間
        poolConfig.setMaxWaitMillis(timeout);
        return poolConfig;
    }
 
    /**
     * jedis連接工廠
     *
     * @param jedisPoolConfig
     * @return
     */
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig, int db) {
        // 單機(jī)版jedis
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        // 設(shè)置redis服務(wù)器的host或者ip地址
        redisStandaloneConfiguration.setHostName(hostName);
        // 設(shè)置默認(rèn)使用的數(shù)據(jù)庫(kù)
        redisStandaloneConfiguration.setDatabase(db);
        // 設(shè)置密碼
        redisStandaloneConfiguration.setPassword(RedisPassword.of(passWord));
        // 設(shè)置redis的服務(wù)的端口號(hào)
        redisStandaloneConfiguration.setPort(port);
 
        // 獲得默認(rèn)的連接池構(gòu)造器
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
                .builder();
        // 指定jedisPoolConifig來修改默認(rèn)的連接池構(gòu)造器
        jpcb.poolConfig(jedisPoolConfig);
        // 通過構(gòu)造器來構(gòu)造jedis客戶端配置
        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
        // 單機(jī)配置 + 客戶端配置 = 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è)務(wù)代碼

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數(shù)據(jù)庫(kù)1,如果要監(jiān)聽redis所有的庫(kù),把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);

    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決

    Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決

    本文主要介紹了Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis高性能Key-Value存儲(chǔ)與緩存利器常見解決方案

    Redis高性能Key-Value存儲(chǔ)與緩存利器常見解決方案

    Redis是高性能內(nèi)存Key-Value存儲(chǔ)系統(tǒng),支持豐富數(shù)據(jù)類型與持久化方案(RDB/AOF),本文給大家介紹Redis高性能Key-Value存儲(chǔ)與緩存利器常見解決方案,感興趣的朋友一起看看吧
    2025-09-09
  • 使用SpringBoot?+?Redis?實(shí)現(xiàn)接口限流的方式

    使用SpringBoot?+?Redis?實(shí)現(xiàn)接口限流的方式

    這篇文章主要介紹了SpringBoot?+?Redis?實(shí)現(xiàn)接口限流,Redis?除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請(qǐng)求接口冪等,文中給大家提到了限流注解的創(chuàng)建方式,需要的朋友可以參考下
    2022-05-05
  • Redisson實(shí)現(xiàn)Redis分布式鎖的幾種方式

    Redisson實(shí)現(xiàn)Redis分布式鎖的幾種方式

    本文在講解如何使用Redisson實(shí)現(xiàn)Redis普通分布式鎖,以及Redlock算法分布式鎖的幾種方式的同時(shí),也附帶解答這些同學(xué)的一些疑問,感興趣的可以了解一下
    2021-08-08
  • redis分布式鎖優(yōu)化的實(shí)現(xiàn)

    redis分布式鎖優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了redis分布式鎖優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Ubuntu下Redis密碼設(shè)置問題及其解決過程

    Ubuntu下Redis密碼設(shè)置問題及其解決過程

    這篇文章主要介紹了Ubuntu下Redis密碼設(shè)置問題及其解決過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 配置redis.conf遠(yuǎn)程訪問的操作

    配置redis.conf遠(yuǎn)程訪問的操作

    文章詳細(xì)介紹了Redis的配置文件位置、如何編輯配置文件以實(shí)現(xiàn)遠(yuǎn)程訪問,以及驗(yàn)證和監(jiān)控Redis配置的方法,感興趣的朋友一起看看吧
    2025-02-02
  • Redis的BitMap使用操作命令

    Redis的BitMap使用操作命令

    Redis 為我們提供了位圖這一數(shù)據(jù)結(jié)構(gòu),每個(gè)用戶每天的登錄記錄只占據(jù)一位,365天就是365位,僅僅需要46字節(jié)就可存儲(chǔ),極大地節(jié)約了存儲(chǔ)空間,這篇文章主要介紹了Redis的BitMap使用操作命令,需要的朋友可以參考下
    2023-10-10
  • caffeine_redis自定義二級(jí)緩存

    caffeine_redis自定義二級(jí)緩存

    這篇文章詳細(xì)介紹了caffeine_redis 自定義二級(jí)緩存,文中有相關(guān)的背景前提與出現(xiàn)的問題,感興趣的同學(xué)可以參考一下
    2023-04-04
  • Redis 有序集合的使用場(chǎng)景

    Redis 有序集合的使用場(chǎng)景

    在Redis的學(xué)習(xí)中,有序集合是一種非常實(shí)用的數(shù)據(jù)結(jié)構(gòu),本文就來介紹一下Redis 有序集合的使用場(chǎng)景,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

乐安县| 康平县| 辉南县| 寿宁县| 社旗县| 南城县| 宁海县| 冀州市| 德化县| 金坛市| 英吉沙县| 东至县| 高邑县| 毕节市| 临澧县| 安吉县| 兴安盟| 雷波县| 睢宁县| 周至县| 乐安县| 前郭尔| 加查县| 黎川县| 墨竹工卡县| 师宗县| 铜山县| 冷水江市| 万荣县| 东兴市| 大宁县| 武穴市| 金湖县| 仁寿县| 莫力| 泌阳县| 满洲里市| 陆丰市| 锦屏县| 新竹市| 阿鲁科尔沁旗|