文章目录
- [第 4 课:Redis + Spring Boot 实战(从 0 到能用)](#第 4 课:Redis + Spring Boot 实战(从 0 到能用))
-
- 一、先说清楚一件事(非常重要)
-
- [在 Spring Boot 里:](#在 Spring Boot 里:)
- [二、第一步:application.yml 怎么配 Redis(核心)](#二、第一步:application.yml 怎么配 Redis(核心))
-
- [1️⃣ 最常见的 Redis 配置(你一定会见到)](#1️⃣ 最常见的 Redis 配置(你一定会见到))
- 每一项是什么意思(必须懂)
- [2️⃣ Docker Redis 怎么配?](#2️⃣ Docker Redis 怎么配?)
- [三、第二步:Spring Boot 是怎么"连上 Redis 的"?](#三、第二步:Spring Boot 是怎么“连上 Redis 的”?)
- [四、第三步:RedisTemplate 是什么?(一定要搞懂)](#四、第三步:RedisTemplate 是什么?(一定要搞懂))
-
- [1️⃣ RedisTemplate 的角色](#1️⃣ RedisTemplate 的角色)
- [2️⃣ 最常见的两种 Template](#2️⃣ 最常见的两种 Template)
- [五、第四步:在代码里真正用 Redis(重点)](#五、第四步:在代码里真正用 Redis(重点))
-
- [1️⃣ 注入 Redis 客户端](#1️⃣ 注入 Redis 客户端)
- [2️⃣ 最基本:set / get](#2️⃣ 最基本:set / get)
- [3️⃣ 设置过期时间(项目必用)](#3️⃣ 设置过期时间(项目必用))
- [4️⃣ 判断 key 是否存在(排错神器)](#4️⃣ 判断 key 是否存在(排错神器))
- [5️⃣ 删除缓存(非常重要)](#5️⃣ 删除缓存(非常重要))
- 六、真实项目里的"标准缓存代码模板"(重点背这个)
- [七、RedisTemplate 常见操作速查(够你用)](#七、RedisTemplate 常见操作速查(够你用))
- [八、新手 3 个必踩坑(提前帮你避)](#八、新手 3 个必踩坑(提前帮你避))
-
- [❌ 坑 1:RedisTemplate 报错连不上](#❌ 坑 1:RedisTemplate 报错连不上)
- [❌ 坑 2:存进去是乱码](#❌ 坑 2:存进去是乱码)
- [❌ 坑 3:Redis 有值,但代码取不到](#❌ 坑 3:Redis 有值,但代码取不到)
- 九、你现在已经具备的能力(非常重要)
第 4 课:Redis + Spring Boot 实战(从 0 到能用)
学完这一课,你就能做到:
✅ 看懂项目里的 Redis 配置
✅ 知道 RedisTemplate / StringRedisTemplate 是干嘛的
✅ 自己在代码里
set / get / del✅ 不再把 Redis 当"黑盒"
一、先说清楚一件事(非常重要)
在 Spring Boot 里:
- Redis 服务端 :
👉 你服务器上跑的 Redis(本地 / Docker 都行) - Redis 客户端 :
👉 Spring Boot 程序里的 RedisTemplate
Spring Boot 本身不带 Redis 服务端 ,
它只是一个 Redis 客户端程序。
二、第一步:application.yml 怎么配 Redis(核心)
1️⃣ 最常见的 Redis 配置(你一定会见到)
yaml
spring:
redis:
host: 127.0.0.1
port: 6379
password:
database: 0
timeout: 3000
每一项是什么意思(必须懂)
| 配置项 | 含义 |
|---|---|
| host | Redis 地址 |
| port | Redis 端口(默认 6379) |
| password | Redis 密码(没设就空) |
| database | Redis 库号(0~15) |
| timeout | 连接超时时间(毫秒) |
📌 90% 新手 Redis 连不上,都是这里配错
2️⃣ Docker Redis 怎么配?
如果 Redis 跑在 当前服务器 Docker 里,并且:
bash
-p 6379:6379
👉 配置 完全不用改,还是:
yaml
host: 127.0.0.1
port: 6379
三、第二步:Spring Boot 是怎么"连上 Redis 的"?
你不需要自己写连接代码
Spring Boot 在启动时会:
text
读取 application.yml
↓
创建 Redis 连接工厂
↓
创建 RedisTemplate Bean
只要配置对了,你就能直接用。
四、第三步:RedisTemplate 是什么?(一定要搞懂)
1️⃣ RedisTemplate 的角色
RedisTemplate = Java 世界里的 redis-cli
- redis-cli:命令行操作 Redis
- RedisTemplate:Java 代码操作 Redis
2️⃣ 最常见的两种 Template
| 类型 | 用途 |
|---|---|
| RedisTemplate | 通用(Object) |
| StringRedisTemplate | 专门存字符串(最常用) |
👉 新手优先用 StringRedisTemplate
五、第四步:在代码里真正用 Redis(重点)
1️⃣ 注入 Redis 客户端
java
@Autowired
private StringRedisTemplate stringRedisTemplate;
2️⃣ 最基本:set / get
java
stringRedisTemplate.opsForValue()
.set("name", "zhangsan");
String value = stringRedisTemplate.opsForValue()
.get("name");
👉 等价于:
bash
set name zhangsan
get name
3️⃣ 设置过期时间(项目必用)
java
stringRedisTemplate.opsForValue()
.set("code", "123456", 60, TimeUnit.SECONDS);
👉 等价于:
bash
set code 123456 ex 60
4️⃣ 判断 key 是否存在(排错神器)
java
Boolean exists = stringRedisTemplate.hasKey("code");
5️⃣ 删除缓存(非常重要)
java
stringRedisTemplate.delete("user:1001");
👉 更新数据库后一定会用到
六、真实项目里的"标准缓存代码模板"(重点背这个)
这是你以后最常写允许"直接套用"的逻辑
java
String key = "user:" + userId;
// 1. 先查 Redis
String cache = stringRedisTemplate.opsForValue().get(key);
if (cache != null) {
return cache;
}
// 2. 查数据库
String dbData = queryFromDb(userId);
// 3. 写 Redis(设过期)
stringRedisTemplate.opsForValue()
.set(key, dbData, 300, TimeUnit.SECONDS);
return dbData;
👉 90% Redis 缓存代码长这样
七、RedisTemplate 常见操作速查(够你用)
String(Value)
java
opsForValue().set()
opsForValue().get()
Hash(对象)
java
opsForHash().put("user:1", "name", "zhangsan");
opsForHash().get("user:1", "name");
List(队列)
java
opsForList().leftPush("queue", "order1");
opsForList().rightPop("queue");
八、新手 3 个必踩坑(提前帮你避)
❌ 坑 1:RedisTemplate 报错连不上
👉 先检查:
bash
redis-cli ping
如果这里不通,Spring Boot 一定不通。
❌ 坑 2:存进去是乱码
原因:
- 使用了 RedisTemplate(Object)
- 序列化方式不一致
👉 新手优先用 StringRedisTemplate
❌ 坑 3:Redis 有值,但代码取不到
常见原因:
- key 拼错
- 多了前缀
- 不同 database
👉 用:
bash
keys *
对照排查。
九、你现在已经具备的能力(非常重要)
现在的你已经可以:
- 看懂
application.yml里的 Redis - 明白 RedisTemplate 是客户端
- 在 Java 代码里用 Redis 做缓存
- 看懂项目里 80% Redis 代码