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的几种依赖与版本问题
这里借鉴了这篇文章 javascript:void(0)
在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>