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>