SpringBoot项目配置SpringDataRedis

发布于:2024-05-04 ⋅ 阅读:(30) ⋅ 点赞:(0)

1 在SpringBoot中常规的配置

        <dependency>
            <!--自带lettcute客户端-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

RedisProperties类会映射yaml文件中的redis相关配置

    redis:
      host: 10.20.5.47
      port: 6379
      password:
      database: 0
      lettuce:
        pool:
        # Whether to enable the pool. Enabled automatically if "commons-pool2" is available. With Jedis, pooling is implicitly enabled in sentinel mode and this setting only applies to single node setup. 项目里需要引入commons-pool2依赖
          enabled: true 
          min-idle: 16
          max-idle: 16
          max-active: 64
          max-wait: 3000
// 基于 spring boot starter data redis 3.0

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig {

    /**
    key、value序列化配置
    */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        template.setHashValueSerializer(RedisSerializer.json());
        template.setValueSerializer(RedisSerializer.json());
        return template;
    }

    /**
     * 前提条件:redis使用lettuce作为连接池
     * 配置RedisTemplate,读取数据库1的数据.
     */
    @Bean("redisTemplate1")
    public RedisTemplate<String, Object> redisTemplate1(LettuceConnectionFactory lettuceConnectionFactory) {
        LettuceClientConfiguration clientConfiguration = lettuceConnectionFactory.getClientConfiguration();
        RedisStandaloneConfiguration standaloneConfiguration = lettuceConnectionFactory.getStandaloneConfiguration();
        //新创建RedisStandaloneConfiguration实例, 记得设置所有的字段
        RedisStandaloneConfiguration newSandaloneConfiguration = new RedisStandaloneConfiguration(standaloneConfiguration.getHostName(), standaloneConfiguration.getPort());
        //指定要连接的索引
        newSandaloneConfiguration.setDatabase(1);
        newSandaloneConfiguration.setUsername(standaloneConfiguration.getUsername());
        newSandaloneConfiguration.setPassword(standaloneConfiguration.getPassword());
        LettuceConnectionFactory lettuceConnectionFactory1 = new LettuceConnectionFactory(newSandaloneConfiguration, clientConfiguration);
        // 不能忽略这个方法的调用,否则会出现异常。
        lettuceConnectionFactory1.afterPropertiesSet();
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory1);
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        template.setHashValueSerializer(RedisSerializer.json());
        template.setValueSerializer(RedisSerializer.json());
        return template;
    }
}

Redis连接池参数配置建议

阿里云参考文档