一、增(Create)🔥
1️⃣ 最基础:存字符串
java
redisTemplate.opsForValue().set("key", "value");
👉 场景:
- 缓存数据
- 登录态 token
2️⃣ 设置过期时间(非常常用🔥)
java
redisTemplate.opsForValue().set("key", "value", 10, TimeUnit.MINUTES);
👉 场景:
- 缓存自动失效
- 避免脏数据
3️⃣ 存对象(常见🔥)
java
redisTemplate.opsForValue().set("user:1", user);
👉 注意:
- 需要序列化(JSON / Redis序列化器)
👉 场景:
- 用户信息缓存
- 商品详情缓存
4️⃣ Hash 存对象(更推荐🔥)
java
redisTemplate.opsForHash().put("user:1", "name", "Tom");
redisTemplate.opsForHash().put("user:1", "age", 18);
👉 场景:
- 存复杂对象
- 避免整体序列化
二、查(Read)🔥
1️⃣ 获取字符串 / 对象
java
redisTemplate.opsForValue().get("key");
2️⃣ 判断是否存在
java
redisTemplate.hasKey("key");
👉 场景:
- 防止重复请求
- 缓存判断
3️⃣ Hash 查询
java
redisTemplate.opsForHash().get("user:1", "name");
👉 或获取整个对象:
java
redisTemplate.opsForHash().entries("user:1");
4️⃣ 设置过期时间查询
java
redisTemplate.getExpire("key");
三、改(Update)🔥
1️⃣ 覆盖更新(最常见)
java
redisTemplate.opsForValue().set("key", "newValue");
👉 本质:
👉 Redis 没有"修改",只有重新 set
2️⃣ Hash 更新(局部更新🔥)
java
redisTemplate.opsForHash().put("user:1", "name", "Jerry");
👉 场景:
- 修改用户某个字段
3️⃣ 自增(计数🔥)
java
redisTemplate.opsForValue().increment("count");
👉 场景:
- 浏览量
- 点赞数
- 访问次数
4️⃣ 自减
java
redisTemplate.opsForValue().decrement("stock");
👉 场景:
- 秒杀库存
5️⃣ 修改过期时间
java
redisTemplate.expire("key", 5, TimeUnit.MINUTES);
👉 场景:
- 延长缓存时间
四、删(Delete)🔥
1️⃣ 删除单个 key
java
redisTemplate.delete("key");
2️⃣ 批量删除
java
redisTemplate.delete(Arrays.asList("k1", "k2"));
3️⃣ 模糊删除(慎用🔥)
java
Set<String> keys = redisTemplate.keys("user:*");
redisTemplate.delete(keys);
👉 场景:
- 删除一类缓存
⚠️ 生产慎用(会阻塞)
五、真实项目中的完整流程(重点🔥)
👉 以"用户查询"为例:
java
public User getUser(Long id) {
String key = "user:" + id;
// 1. 查缓存
User user = (User) redisTemplate.opsForValue().get(key);
if (user != null) {
return user;
}
// 2. 查数据库
user = userMapper.selectById(id);
// 3. 放入缓存
redisTemplate.opsForValue().set(key, user, 30, TimeUnit.MINUTES);
return user;
}
👉 这就是标准:
👉 缓存穿透/缓存使用模型(高频面试)
六、常见组合(真实项目🔥)
1️⃣ 缓存 + 过期时间
java
set + expire
👉 避免数据永久不更新
2️⃣ 缓存击穿(热点数据)
👉 解决方式:
- 加锁(Redis分布式锁)
- 逻辑过期
3️⃣ 缓存雪崩
👉 解决:
- 随机过期时间
java
redisTemplate.opsForValue().set("key", "value", 30 + new Random().nextInt(10), TimeUnit.MINUTES);
七、一句话总结(面试直接用🔥)
👉
Spring Boot 中 Redis 的增删改查本质是:通过 RedisTemplate 提供的 set、get、delete、increment 等 API 实现数据的存储、查询、更新和删除,其中增和改本质都是 set,查用 get,删用 delete,并结合过期时间和 Hash、List 等结构实现复杂业务。