Redis 1 👍SpringBoot项目Redis连接配置:连接工厂、自动化配置、序列化
引言
在日常的Java项目开发过程中,我们会经常遇见和Redis配置相关的一些问题。这里以SpringBoot为例,经过一些简单的配置,快速的在你的项目中引入Redis.
一、引入依赖&&配置文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在你的pom.xml文件里添加上述依赖,然后在配置文件application.properties里编写一下Redis相关的一些配置项:包括但不限于主机IP、端口号、重连时间、Redis数据库等等一些常用的配置项。
# Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.timeout=10s
spring.redis.database=0
spring.cache.redis.cache-null-value=true
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max.idle=8
二、创建一个配置类RedisConfig.java
在你的项目配置config文件夹下创建一个RedisConfig文件。并编写一个redisTemplate()方法,具体代码如下:
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//设置Redis连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置key的序列化策略
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置value的序列化策略
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
return redisTemplate
}
首先就是要创建一个Redis连接工厂,这时已经可以正常连接到你本地的redis中了,但是储存key-value需要将其序列化,于是我们需要指定序列化策略。
可以看到,我们上面添加了@Bean注解,这样的话,在项目启动的时候,就会以这个方法名来命名,生成一个Bean对象,给他注册到SpringBoot的IOC容器里面,然后这个参数呢是Redis连接工厂。他会在执行 @Resource RedisTemplate
的时候会进行自动装配。通常。我们还会再封装一个RedisUtil工具类,用于和redis进行交互,里面会写入一些常用的方法,如:set,get,incur(自增)等等,需要根据项目自行定义。
那如果我们不设置RedisConfig类,不指定序列化策略,会发生什么呢?SpringBoot就会去使用一些默认的这个序列化器和连接工厂。具体的源码层面有一个RedisAutoConfiguration这样一个配置类,它默认的配置的连接工厂是 LettuceConnectionFactory
。具体没有太大变化,但是上面有一个注解@ConditionalOnMissingBean指明了如果没有显示的配置reidsTemplate就会启用默认配置。而其中Java的默认序列化策略 JdkSerializationRedisSerializer
被同时使用在key和value上,就会导致出现乱码,出现一些我们看不懂的标识,如下:
我们希望能避免这种情况,所以我们需要手动配置序列化器,key我们使用的是StringRedisSerializer(),而value常见的是Jackson和阿里提供的FastJson序列化器。
三、两种连接实现方式--Lettuce、Jedis
实际上,SpringBoot是支持Lettuce和Jedis两种连接方式。实际上RedisConnectionFactory本身也是有两个实现类。只是SpringBoot在默认的情况下使用的是Lettuce(生菜)。
那为什么使用Lettuce为默认实现? 因为Lettuce它是基于Netty来实现的一种高性能的Reids客户端,自从SpringBoot2.0版本之后,官方就推荐使用Lettuce了。可以在配置文件里通过一个配置项,指定连接方式 spring.redis.client-type=jedis
评论区