前言
Spring Boot
中使用 Redis
,具体有以下几个步骤:
- 添加依赖
- 编辑配置文件
- 编辑配置类
1. 添加 Redis 客户端的 Maven 依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
脚本很简单,但是有 2 个问题,需要我们探讨一下
- 什么是
Redis
客户端 - 什么是
Spring Boot Starter
在 Spring Boot
项目中使用 Redis
,需要使用对应的 Redis客户端
Redis客户端
能够与
Redis 服务器
进行通信并执行数据操作的程序或工具 ,其核心作用是作为用户与Redis 服务
之间的交互接口。
常见的Redis 客户端 Java 库
有:Jedis
和Lettuce
从性能、资源损耗等多个对比维度,来说,Lettuce
会更有优势
spring-boot-starter-data-redis
默认的Redis客户端工具
就是Lettuce
本文也是使用Lettuce
作为Redis 客户端
那么,什么又是Spring Boot Starter
呢?
它的翻译是:Spring Boot 场景启动器
作用是把当前场景要用的jar
包都引入进来,简化依赖配置
命名格式
官方格式通常为:
spring-boot-starter-*
第三方格式:
*-spring-boot-starter
比如前面添加的
spring-boot-starter-data-redis
,我们就可以得知,它是Spring
官方提供的一个场景启动器
每一个starter
都有一个基础依赖:spring-boot-starter
2. 编辑 yaml 配置文件
yaml
spring:
redis:
host: 192.168.0.1
port: 6379
password: 123321
lettuce:
pool:
max-active: 10 #最大连接
max-idle: 10 #最大空闲连接
min-idle: 1 #最小空闲连接
max-wait: 1s #连接等待时间
time-between-eviction-runs: 30s # 定期检测空闲连接
主要是配置Redis
连接信息,以及lecttuce
连接池信息
Redis 连接池
一种 管理 Redis 连接的机制,用于避免频繁创建和销毁连接带来的性能开销,提升系统效率和资源利用率
可以视具体情况考虑是否使用连接池,以及调整连接池参数
3. 编辑配置类
java
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
// 设置redis的连接工厂对象
// 在这步可以切换 redis 客户端,前提是定义好 redisConnectionFactory
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置redis key的序列化器
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 设置redis value的序列化器
// 自动添加 `@class` 类型信息,避免反序列化失败
// 特征:序列化后有 class 信息
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
return redisTemplate;
}
}
我们着重关注对于Rdis序列化器
改造,即
java
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
注意 以上代码属于
Spring Data Redis 2.2+
推荐写法,如果你的Spring Data Redis
版本较低,可以使用如下代替
javaredisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
为什么我们要自定义序列化器呢?
默认的序列化器,在redis
中存储的数据是这样的

缺点很明显:可读性差,内存占用较大
自定义序列化器便是为了解决这些问题
当然,也有其他方式进行自定义序列化,比如Jackson2JsonRedisSerializer
、FastJson
等方式,在此不做展开
测试
自此,我们便可以通过redisTemplate
提供的相关方法进行使用了
java
@SpringBootTest
class RedisStringTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString() {
// 写入一条String数据
redisTemplate.opsForValue().set("name", "Tom");
// 获取string数据
Object name = stringRedisTemplate.opsForValue().get("name");
System.out.println("name = " + name);
}
}