1、引入依赖

Springboot中可以引入整合的redis的starter依赖

如:

<!-- springboot整合redis,包含了spring-data-redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <!--   不加版本号,会自动找当前项目springboot版本对应的版本   -->
        </dependency>

spring-redis的几种依赖与版本问题

这里借鉴了这篇文章 https://blog.csdn.net/a__int__/article/details/116042968

在spring与redis整合时有下面几种:
1、spring-boot-starter-data-redis
2、spring-boot-starter-redis
3、spring-data-redis

spring-boot-starter-data-redis和spring-boot-starter-redis中都包含有spring-data-redis

 

 现在基本使用的都是 spring-boot-starter-data-redis

 

 2、yml配置redis的参数

参数根据自己情况定

spring:
  redis:
    host: 192.168.181.10
    port: 6379
    timeout: 20000  # 连接超时时间(毫秒)
    password: 123456
    database: 10   #Redis数据库索引0-255其中一个,默认0
    jedis:
      pool:
        max-active: 50  #连接池最大连接数(使用负值表示没有限制)
        max-idle: 50  # 连接池中的最大空闲连接
        min-idle: 10  # 连接池中的最小空闲连接
        max-wait: 2000 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        time-between-eviction-runs: 60000

 

其实配置到这,已经可以使用@Autowired注入RedisTemplate使用了,因为SpringBoot自动在容器中生成了一个RedisTemplate和一个StringRedisTemplate,但是这个RedisTemplate的泛型是<Object,Object>,并且没有设置数据存在Redis时,key及value的序列化方式,可以查看RedisAutoConfiguration这个redis的自动配置类源码

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
    public RedisAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean(
        name = {"redisTemplate"}
    )
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    @ConditionalOnMissingBean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}
@ConditionalOnMissingBean注解

仅当 BeanFactory 中不包含指定的 bean class 和/或 name 时条件匹配 该条件只能匹配到目前为止 application context 已经处理的 bean 定义,因此强烈建议仅在自动配置类上使用此条件。
详情请查看 https://developer.aliyun.com/article/635990

 Spring容器中有了RedisTemplate对象了,这个自动配置的RedisTemplate不会实例化 

 

3、自定义redis配置类

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        //json序列化配置
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
        serializer.setObjectMapper(objectMapper);

        //String序列化配置
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        //key和hash的key都采用Stringd的序列化配置
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        //value和hash的value采用Json的序列化配置
        redisTemplate.setValueSerializer(serializer);
        redisTemplate.setHashValueSerializer(serializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;


    }

}

如果使用的依赖是spring-data-redis,那么需要引入redis的依赖,redisConnectionFactory需要

     <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.1</version>
        </dependency>