侧边栏壁纸
  • 累计撰写 7 篇文章
  • 累计创建 5 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Redis 1 👍SpringBoot项目Redis连接配置:连接工厂、自动化配置、序列化

Lieey
2024-07-21 / 0 评论 / 0 点赞 / 54 阅读 / 3793 字

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上,就会导致出现乱码,出现一些我们看不懂的标识,如下:

image-doke.png

我们希望能避免这种情况,所以我们需要手动配置序列化器,key我们使用的是StringRedisSerializer(),而value常见的是Jackson和阿里提供的FastJson序列化器。

三、两种连接实现方式--Lettuce、Jedis

image-hhqo.png

实际上,SpringBoot是支持Lettuce和Jedis两种连接方式。实际上RedisConnectionFactory本身也是有两个实现类。只是SpringBoot在默认的情况下使用的是Lettuce(生菜)。

那为什么使用Lettuce为默认实现? 因为Lettuce它是基于Netty来实现的一种高性能的Reids客户端,自从SpringBoot2.0版本之后,官方就推荐使用Lettuce了。可以在配置文件里通过一个配置项,指定连接方式 spring.redis.client-type=jedis

0

评论区