1.简介
SpringBoot整合Redis的方法百度一下即可,但是,我更想知道官方文档是如何介绍SpringBoot整合Redis的方式。https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.nosql
2.官方文档阅读
SpringData项目提供了整合各种NoSQL技术的方案。SpringBoot为Redis、MongoDB、ES等NoSQL数据库提供了自动配置(简单理解就是引入依赖就可以使用)。
SpringBoot提供了基础的自动配置为Lettuce客户端和Jedis客户端。使用spring-boot-starter-data-redis
即可使用。默认使用的是Lettuce客户端。
在完成上述引入后,你可以在程序中注入使用RedisConnectionFactory
、StringRedisTemplate
、RedisTemplate
。你可以使用@Bean的方式覆盖上面的Bean,除了RedisTemplate,因为它只能使用redisTemplate
启用连接池的方式就是:引入commons-pool2包,并且配置RedisProperties中Pool类型的一个配置即可。
个人感觉官方文档虽然说的不多,但是基本上已经把要点都讲出来了,但是没有Demo,用起来总是让人感觉不踏实。另外,好多博客中,都会去配置RedisTemplate的key-value序列化。如何配置并未提到。
3.POM以及YAML的配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
3.1连接单例
# 数据源配置
spring:
redis:
host: ip地址
port: 端口
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
3.2连接集群
spring:
redis:
timeout: 6000ms
database: 0
cluster:
nodes:
- ip:port
- ip:port
- ip:port
- ip:port
- ip:port
- ip:port
lettuce:
pool:
max-active: 10
max-idle: 10
min-idle: 5
4.RedisTemplate的配置
在第2点中提到的3个Bean都可以自己去配置。但是需要配置的就是RedisTemplate,一般配置其key和Value的序列化。StringRedisTemplate(SRT)
继承自RedisTemplate<K,V>
,SRT的key和value均是String
类型,一般我们配置RedisTemplate为<String,Object>
类型,并对序列化进行设置即可。
配置如下(大家可以自行百度):
public class RedisConfig
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
{
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
之后在项目中如下引用即可@Resource<br />private RedisTemplate<String,Object> redisTemplate;