【Java】Redis的配置和使用

引入 spring-data-redis 依赖
implementation "org.springframework.data:spring-data-redis"

官网说明文档
与 Redis 连接,有多种连接器。根据官网文档介绍,有以下几种:

  • Jedis connector
  • JRedis connector
  • SRP connector
  • Lettuce connector

以下只介绍 Jedis,但推荐使用 Lettuce,因为 Jedis 线程不安全,Lettuce 线程安全.

Jedis 和 Jedis Pool 的具体介绍请参考Jedis和Jedis连接池的基本使用和配置

SpringBoot 自动配置连接 Jedis

在 SpringBoot2.× 使用 jedis,之后被替换为 lettuce

配置信息

在 application.yml 中写配置信息

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0											
    password:
    jedis:
      pool:
        max-active: 32
        max-wait: -1
        max-idle: 8
        min-idle: 0

p.s. 新版本的 jedis 中将 maxActive 改成了 maxTotal,MaxWait 改成了 MaxWaitMillis

自动装配

SpringBoot 会自动配置 Redis,所以只需要的地方使用 RedisTemplate

@Autowired
private RedisTemplate<String, String> redisTemplate;

自定义配置连接 Jedis

若需要将 redis 某功能封装成 framework,并可作为第三方包引入使用,则需要自行配置

排除自动装配

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})

创建配置类

配置 JedisConnectionFactory 和 RedisTemplate Bean,注入 IOC 容器

@Configuration
public class RedisConfiguration {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.database}")
    private int database;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private int maxWait;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration(host, port);
        serverConfig.setDatabase(database);
        if (Strings.isNotBlank(password)) {
            serverConfig.setPassword(password);
        }
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(maxActive);
        poolConfig.setMaxWaitMillis(maxWait);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
        jpcb.poolConfig(poolConfig);
        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
        return new JedisConnectionFactory(serverConfig, jedisClientConfiguration);
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(JedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置序列化,防止乱码
        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(stringSerializer);
        //刷新配置
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

自动装配

在需要的地方使用 RedisTemplate

@Autowired
private RedisTemplate<String, String> redisTemplate;
posted @ 2023-02-18 19:33  洗衣机o  阅读(209)  评论(0)    收藏  举报