一、Jedis(原生 Redis Java 客户端)
Jedis 是 Redis 官方推荐的 Java 原生客户端,方法名几乎和 Redis 命令完全一致,上手简单。
1、基础直连使用
-
引入 Maven 依赖
redis.clients jedis 3.7.0 -
创建连接
// new Jedis(IP,端口)
jedis = new Jedis("192.168.150.101",6379);
jedis.auth("密码"); //设置密码
jedis.select(0); //选择0号数据库 -
CRUD 示例(String 类型)
jedis.set("name","张三"); //存
jedis.get("name"); //取 -
资源释放 :使用完毕必须
jedis.close()关闭连接,释放网络资源;单元测试可以用@AfterEach注解,测试结束自动关闭。
⚠️缺点:Jedis 实例线程不安全 ;频繁
new Jedis()创建销毁连接性能差,生产环境禁止直接直连。
2、Jedis 连接池
- 作用:复用连接,避免频繁创建销毁;解决线程不安全问题。
- 核心配置参数
maxTotal:最大总连接数maxIdle:最大空闲连接minIdle:最小空闲连接maxWaitMillis:获取连接最长等待时间 (ms)
- 使用:静态代码块初始化
JedisPool,调用getResource()获取 Jedis 对象;用完归还连接池,不手动 close。
二、SpringDataRedis(SpringBoot 集成 Redis)
SpringData 是 Spring 的数据操作模块,SpringDataRedis 是专门操作 Redis 的子模块,底层支持两套客户端:Jedis、Lettuce,SpringBoot2 默认 Lettuce。
1、依赖导入
<!-- spring‑data‑redis启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‑boot‑starter‑data‑redis</artifactId>
</dependency>
<!-- 连接池依赖(commons‑pool2) -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons‑pool2</artifactId>
</dependency>
2、核心工具类 RedisTemplate
自动注入@Autowired private RedisTemplate redisTemplate; 不同数据类型,对应不同操作 API:
表格
| API | 作用 |
|---|---|
redisTemplate.opsForValue() |
操作 String 字符串 |
redisTemplate.opsForHash() |
操作 Hash |
redisTemplate.opsForList() |
操作 List |
redisTemplate.opsForSet() |
操作 Set |
redisTemplate.opsForZSet() |
操作 ZSet 有序集合 |
示例:
//存字符串
redisTemplate.opsForValue().set("name","李四");
//读取
Object name = redisTemplate.opsForValue().get("name");
3、序列化问题
- 默认序列化缺陷:RedisTemplate 默认使用 JDK 序列化,存入 Redis 的 key/value 会出现乱码前缀,可读性差,只支持 Java 对象。
- 自定义序列化方案
- key、hashKey:使用
StringRedisSerializer字符串序列化 - value、hashValue:使用
GenericJackson2JsonRedisSerializerJSON 序列化,可以直接把对象序列化为 JSON 字符串存入 Redis。 - 通过
@Bean自定义 RedisTemplate 覆盖默认配置。
- key、hashKey:使用
- StringRedisTemplate(Spring 自带)
- key、value 全部强制字符串序列化,不会产生乱码,不需要自定义序列化配置。
- 局限:只能存字符串;Java 对象需要手动借助
ObjectMapper完成对象↔JSON 字符串的转换。
对比记忆
- RedisTemplate:可存对象,默认 JDK 序列化乱码,需要自定义 JSON 序列化;
- StringRedisTemplate:只操作字符串,无乱码,对象要手动 JSON 转换。
三、Jedis vs SpringDataRedis 对比
表格
| 对比项 | Jedis | SpringDataRedis(RedisTemplate) |
|---|---|---|
| 层级 | 原生底层客户端 | Spring 高层封装 |
| API | 和 Redis 命令几乎一模一样 | 封装 opsForXXX 系列 API |
| 线程安全 | Jedis 实例不安全,依赖连接池 | 线程安全,直接注入使用 |
| 序列化 | 不需要序列化,存字节 / 字符串 | 自带序列化机制,需要关注乱码问题 |
| 适用场景 | 简单测试、传统 Java 项目 | SpringBoot 项目,企业开发主流 |