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

Springboot如何配置多個(gè)Redis數(shù)據(jù)源(非集群)

 更新時(shí)間:2025年03月13日 09:32:02   作者:程序員阿斌  
這篇文章主要介紹了Springboot如何配置多個(gè)Redis數(shù)據(jù)源(非集群)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

背景

最近線上碰到一個(gè)多redis源的場(chǎng)景,一個(gè)工程需要整合兩個(gè)redis。

這時(shí)使用一些數(shù)據(jù)傳輸、轉(zhuǎn)換工具,例如filebeat、logstash、kafka-connect等,這或許也是個(gè)不錯(cuò)的方法,但是因?yàn)闅v史原因,最后還是需要到工程里面自己整合。話不多說(shuō)直接開(kāi)整!

引入依賴(lài)

下面直接給出pom文件依賴(lài)配置:

        <!-- springboot官方整合redis依賴(lài), 版本根據(jù)自己常用springboot的版本來(lái) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.3.2.RELEASE</version>
        </dependency>
        
        <!-- fastjson依賴(lài) -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.32</version>
        </dependency>
        
        <!-- 對(duì)象轉(zhuǎn)換工具 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

添加Redis環(huán)境

application.yml添加redis配置:

spring:
  # redis-1
  redis:
    database: 0
    # redis服務(wù)器地址
    host: 192.168.2.3
    # Redis服務(wù)器連接端口
    port: 6379
    lettuce:
      pool:
        # 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制) 默認(rèn) 8
        max-active: 8
        # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制) 默認(rèn) -1
        max-wait: -1
        # 連接池中的最大空閑連接 默認(rèn) 8
        max-idle: 8
        # 連接池中的最小空閑連接 默認(rèn) 0
        min-idle: 0
    # redis服務(wù)器連接密碼(默認(rèn)為空)
    password: 123456
    timeout: 800
  # redis-2
  redis-live:
    database: 0
    host: 192.168.2.8
    port: 6379
    lettuce:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    password: 234567
    timeout: 800

Redis配置

接下來(lái)編寫(xiě)redis配置類(lèi),在裝配不同的RedisTemplate的時(shí)候根據(jù)需要采用不同的序列化方式,在使用的時(shí)候按需引入,下面是我的注入配置:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@Configuration
@EnableCaching
public class RedisTemplateConfig {

    /**
     * live數(shù)據(jù)源
     */
    @Value("${spring.redis-live.host}")
    private String redisLiveHost;

    @Value("${spring.redis-live.port}")
    private int redisLivePort;

    @Value("${spring.redis-live.password}")
    private String redisLivePass;

    @Value("${spring.redis-live.database}")
    private int redisLiveDb;


    /**
     * 公共配置
     */
    @Value("${spring.redis.timeout}")
    private long timeout;

    @Value("${spring.redis.lettuce.pool.min-idle}")
    private int minIdle;

    @Value("${spring.redis.lettuce.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.lettuce.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.lettuce.pool.max-wait}")
    private int maxWait;

    /**
     * 裝配 RedisTemplate
     */
//    @Bean(name = "redisTemplate")
//    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//        return createRedisTemplate(redisConnectionFactory);
//    }

    @Bean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        // key的序列化采用StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }


    /**
     * 裝配 StringRedisTemplate
     */
    @Bean(name = "stringRedisTemplate")
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        return createStringRedisTemplate(redisConnectionFactory);
    }

    /**
     * 裝配 live數(shù)據(jù)源
     */
    @Bean(name = "liveStringRedisTemplate")
    public StringRedisTemplate liveStringRedisTemplate() {
        return createStringRedisTemplate(redisLiveHost, redisLivePort, redisLivePass, redisLiveDb);
    }

    /**
     * 創(chuàng)建 RedisTemplate
     */
    public RedisTemplate<Object, Object> createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

        Jackson2JsonRedisSerializer<?> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        serializer.setObjectMapper(objectMapper);

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(serializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(serializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    /**
     * 創(chuàng)建 StringRedisTemplate
     */
    public StringRedisTemplate createStringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        return stringRedisTemplate;
    }

    /**
     * 創(chuàng)建 StringRedisTemplate
     */
    public StringRedisTemplate createStringRedisTemplate(String host, int port, String password, int database) {
        // 基本配置
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setHostName(host);
        configuration.setPort(port);
        configuration.setDatabase(database);
        if (ObjectUtils.isNotEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }

        // 連接池通用配置
        GenericObjectPoolConfig<?> genericObjectPoolConfig = new GenericObjectPoolConfig<>();
        genericObjectPoolConfig.setMaxTotal(maxActive);
        genericObjectPoolConfig.setMinIdle(minIdle);
        genericObjectPoolConfig.setMaxIdle(maxIdle);
        genericObjectPoolConfig.setMaxWaitMillis(maxWait);

        // Lettuce Pool
        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
        builder.poolConfig(genericObjectPoolConfig);
        builder.commandTimeout(Duration.ofSeconds(timeout));
        LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());
        connectionFactory.afterPropertiesSet();

        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(connectionFactory);
        return stringRedisTemplate;
    }

}

這里注意

@Bean(name = "liveStringRedisTemplate")

將類(lèi)交給spring,后面在引用會(huì)根據(jù)名稱(chēng)引入。

使用

在使用的時(shí)候我們使用@Qualifier顯示引用對(duì)象:

	// redis-1
    @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate<String, String> redisTemplate;

    // redis-2
    @Autowired
    @Qualifier("liveStringRedisTemplate")
    private RedisTemplate<String, String> liveStringRedisTemplate;

下面我們可以使用RedisTemplate愉快地操作redis了!到這里springboot配置多數(shù)據(jù)源就成功了,這里的RedisTemplate還可以整合進(jìn)工具類(lèi),讓操作更加方便!

總結(jié)

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

相關(guān)文章

  • 實(shí)例展示使用Java壓縮和解壓縮7z文件的方法

    實(shí)例展示使用Java壓縮和解壓縮7z文件的方法

    這篇文章主要介紹了實(shí)例展示使用Java壓縮和解壓縮7z文件的方法,用到了7-zip的開(kāi)源項(xiàng)目7-zip-JBinding,需要的朋友可以參考下
    2015-11-11
  • MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼

    MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼

    本文主要介紹了MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 淺談SpringCloud之Ribbon詳解

    淺談SpringCloud之Ribbon詳解

    這篇文章主要介紹了淺談SpringCloud之Ribbon,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)SpringCloud的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • Maven優(yōu)雅的添加第三方Jar包的方法

    Maven優(yōu)雅的添加第三方Jar包的方法

    下面小編就為大家?guī)?lái)一篇Maven優(yōu)雅的添加第三方Jar包的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Spring集成Quartz的簡(jiǎn)單配置的方法

    Spring集成Quartz的簡(jiǎn)單配置的方法

    本篇文章主要介紹了Spring集成Quartz的簡(jiǎn)單配置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • JFinal實(shí)現(xiàn)偽靜態(tài)的方法

    JFinal實(shí)現(xiàn)偽靜態(tài)的方法

    JFinal 是基于 Java 語(yǔ)言的極速 WEB + ORM 框架,其核心設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、代碼量少、學(xué)習(xí)簡(jiǎn)單、功能強(qiáng)大、輕量級(jí)、易擴(kuò)展、Restful。這篇文章主要介紹了JFinal實(shí)現(xiàn)偽靜態(tài),需要的朋友可以參考下
    2018-04-04
  • JVM類(lèi)加載機(jī)制詳解

    JVM類(lèi)加載機(jī)制詳解

    本文主要介紹了JVM類(lèi)加載機(jī)制的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Java將String字符串帶括號(hào)轉(zhuǎn)成List的簡(jiǎn)單方法

    Java將String字符串帶括號(hào)轉(zhuǎn)成List的簡(jiǎn)單方法

    Java中我們有時(shí)需要對(duì)現(xiàn)有的字符串進(jìn)行切割并轉(zhuǎn)化成一個(gè)List集合,這篇文章主要給大家介紹了關(guān)于Java將String字符串帶括號(hào)轉(zhuǎn)成List的簡(jiǎn)單方法,需要的朋友可以參考下
    2023-03-03
  • Log4net 日志記錄詳細(xì)介紹及應(yīng)用

    Log4net 日志記錄詳細(xì)介紹及應(yīng)用

    這篇文章主要介紹了Log4net 日志記錄詳細(xì)介紹及應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java中的CompletionService批量異步執(zhí)行詳解

    Java中的CompletionService批量異步執(zhí)行詳解

    這篇文章主要介紹了Java中的CompletionService批量異步執(zhí)行詳解,我們知道線程池可以執(zhí)行異步任務(wù),同時(shí)可以通過(guò)返回值Future獲取返回值,所以異步任務(wù)大多數(shù)采用ThreadPoolExecutor+Future,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

阳山县| 郧西县| 高雄县| 肥城市| 丽水市| 湘潭县| 丰都县| 柘城县| 申扎县| 宣城市| 吉安市| 任丘市| 泽州县| 湘潭县| 潮州市| 内丘县| 盐边县| 东乌珠穆沁旗| 钟山县| 鄄城县| 天镇县| 富民县| 英山县| 南平市| 宝兴县| 云南省| 年辖:市辖区| 门头沟区| 化州市| 遵义市| 汝南县| 郓城县| 宜兴市| 淄博市| 尤溪县| 宁波市| 堆龙德庆县| 凤阳县| 获嘉县| 徐州市| 祥云县|