RedisTemplate切库

最近在做项目是用到了Redis,之前了解不多,但因为项目要求是需要亿级别文档的搜索秒级别返回,所以使用了SpringBoot集成redis,根据大神设计好的逻辑进行后端开发。在过程中最主要的问题就是在查询不同redis库的索引时需要切库,但是试了setDataBase后无效,最后只能选择最笨的方法,追着一层层源码重写了redisTemplate,并建立了多个连接。

下面是其中一个redis的Properties

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    private String host;
    private int database;
    private int port;
    private int timeout;
    private Lettuce lettuce;
    private Cache cache;

    @Data
    public static class Lettuce {
        private Pool pool;
    }

    @Data
    public static class Pool {
        private int max_active;
        private int max_wait;
        private int max_idle;
        private int min_idle;

    }

    @Data
    public static class Cache{
        private int livetime;
    }

}

下面是重写的一个RedisTemplateConfiguration

import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.resource.DefaultClientResources;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.time.Duration;

@Configuration
public class RedisTemplateConfiguration {

    private final RedisProperties redisProperties;

    @Autowired
    public RedisTemplateConfiguration(RedisProperties redisProperties) {
        this.redisProperties = redisProperties;
    }

    @Configuration
    public class RedisConfig {
        @Bean(name = "redisConnectionFactory")
        @Primary
        public RedisConnectionFactory redisConnectionFactory1() {
            GenericObjectPoolConfig config = new GenericObjectPoolConfig();
            config.setMaxTotal(redisProperties.getLettuce().getPool().getMax_active());
            config.setMaxIdle(redisProperties.getLettuce().getPool().getMax_idle());
            config.setMinIdle(redisProperties.getLettuce().getPool().getMin_idle());
            config.setMaxWaitMillis(redisProperties.getLettuce().getPool().getMax_wait());
            RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
            configuration.setDatabase(redisProperties.getDatabase());
            configuration.setHostName(redisProperties.getHost());
            ClientResources clientResources = DefaultClientResources.builder().build();
            configuration.setPort(redisProperties.getPort());
            LettuceClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder()
                    .poolConfig(config).commandTimeout(Duration.ofSeconds(10)).shutdownTimeout(Duration.ofMillis(100)).clientResources(clientResources).build();
            return new LettuceConnectionFactory(configuration, lettuceClientConfiguration);
        }

        @Bean(name = "redisTemplate")
        @Primary
        public StringRedisTemplate redisTemplate1() {
            StringRedisTemplate redisTemplateObject = new StringRedisTemplate();
            redisTemplateObject.setConnectionFactory(redisConnectionFactory1());
            return redisTemplateObject;
        }

    }
}

用到的三个连接

application.properties中的数据源设置

建立好的redisTemplate的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值