Bootstrap

springboot配置redis

前置

你使用的是 springboot 项目,使用 yml 来进行配置,properties 同理

依赖配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

这个依赖会自动引入:

spring-data-redis(Spring Data Redis 核心库)

lettuce-core(默认的 Redis 客户端,基于 Netty 的高性能客户端)

yml 配置

有 3 大 redis 客户端:Jedis、Redisson、Lettuce,其中在 spring boot2 之后,redis连接默认就采用了 lettuce

spring:
  redis:
    host: localhost  # Redis 服务器地址
    port: 6379       # Redis 服务器端口,默认是 6379
    password:        # Redis 密码(如果没有密码,可以省略)
    database: 0      # 使用的数据库索引,默认是 0
    timeout: 2000    # 连接超时时间(毫秒)
    lettuce:
      pool:
        max-active: 8      # 连接池最大连接数
        max-idle: 8        # 连接池最大空闲连接数
        min-idle: 0        # 连接池最小空闲连接数
        max-wait: -1ms     # 连接池最大阻塞等待时间(-1 表示无限制)

自定义配置(非必要)

配置完成 yml 后,你无需再配置 RedisTemplate 和 StringRedisTemplate 的 Configuration 代码了,因为 Spring Boot 会自动配置 RedisTemplate 和 StringRedisTemplate,你可以直接注入它们来操作 Redis

但是如果你非要自己在做额外的配置,那么你可以写如下这样的代码:

@Configuration  
public class RedisConfig {  
 
    @Bean  
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {  
        RedisTemplate<String, Object> template = new RedisTemplate<>();  
        template.setConnectionFactory(redisConnectionFactory);  
 
        // 使用StringRedisSerializer来序列化和反序列化redis的key值  
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();  
        template.setKeySerializer(stringRedisSerializer);  
        template.setHashKeySerializer(stringRedisSerializer);  
 
        // 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值  
        GenericJackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer<>();  
        ObjectMapper objectMapper = new ObjectMapper();  
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);  
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);  
        template.setValueSerializer(jackson2JsonRedisSerializer);  
        template.setHashValueSerializer(jackson2JsonRedisSerializer);  
 
        template.afterPropertiesSet();  
        return template;  
    }  
}

正常使用

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    // 存储数据
    public void setValue(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    // 获取数据
    public String getValue(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    // 存储对象
    public void setObject(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    // 获取对象
    public Object getObject(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;