第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)

上一篇我们讲清了 Redis 在后端的定位:
它不是数据库,而是系统的性能调节器与状态中心。

这一篇不谈概念,直接落地:

做一个 最小可运行缓存系统

目标只有四件事:

  • 查询接口缓存
  • 缓存失效策略
  • 防缓存穿透
  • 登录态缓存

一、准备环境

1. 启动 Redis(本地或服务器)

Mac / Linux:

复制代码
redis-server

测试连接:

复制代码
redis-cli ping

返回 PONG 说明成功。

2. Spring Boot 引入依赖

XML 复制代码
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3. application.yml 配置

bash 复制代码
spring:
  redis:
    host: 127.0.0.1
    port: 6379

二、第一个缓存:查询接口

场景

bash 复制代码
查商品详情

逻辑目标:

bash 复制代码
先查 Redis
没有 → 查数据库
查到 → 回填 Redis

示例代码(伪代码逻辑)

java 复制代码
public Product getProduct(Long id) {
    String key = "product:" + id;

    // 1. 查缓存
    Product p = redis.get(key);
    if (p != null) return p;

    // 2. 查数据库
    p = db.query(id);

    // 3. 回填缓存
    redis.set(key, p, 10分钟);

    return p;
}

效果:

  • 第一次慢
  • 后面极快

三、缓存失效策略

缓存不是永久的,否则数据会脏。

常见策略三种:

1. TTL 自动过期(最常用)

java 复制代码
redis.set(key, value, 600秒);

2. 更新时主动删除

java 复制代码
更新商品 → 删除缓存

3. 延迟双删(进阶)

java 复制代码
更新 → 删除缓存 → 延迟1秒再删一次

用于高并发一致性。

四、防缓存穿透(必须会)

问题:

java 复制代码
用户查一个不存在的 ID
每次都打数据库

解决:

空值缓存

java 复制代码
if (db查不到) {
  redis.set(key, "null", 60秒);
}

五、登录态缓存(高频场景)

Redis 非常适合存登录状态。

模型:

java 复制代码
userId → token
token → 状态

伪代码:

java 复制代码
loginSuccess(userId, token) {
  redis.set("token:" + token, userId, 7天);
}

实现能力:

  • 强制下线
  • 单点登录
  • 多端控制

六、简单限流(加分项)

场景:

java 复制代码
登录接口防刷

逻辑:

java 复制代码
count = redis.incr(ipKey);
if (count == 1) redis.expire(ipKey, 60秒);
if (count > 10) 拒绝访问;

七、实战结构图

java 复制代码
浏览器
   ↓
Spring Boot
   ↓
Redis ← 缓存 / 登录态 / 限流
   ↓
MySQL

Redis 在这里承担的是:

  • 查询加速
  • 状态存储
  • 并发控制

八、工程级注意事项

问题 解决
内存爆炸 设置 TTL
Key 混乱 命名规范
数据不一致 更新删除缓存
穿透攻击 空值缓存

一句话终极理解

Redis 不是用来存数据的,
而是用来让系统"更快、更稳、更抗压"的。

相关推荐
栗子~~9 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
隔窗听雨眠9 小时前
多活部署、CDN加速与边缘缓存全链路优化实战
缓存
未若君雅裁10 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
Mr. zhihao12 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
辰海Coding12 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
1892280486112 小时前
NY352固态MT29F32T08GWLBHD6-24QJ:B
大数据·服务器·人工智能·科技·缓存
丷丩13 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
柿柿快乐14 小时前
Redis 入门第一课:全局命令、内部编码与单线程模型
redis·学习·缓存·基础教学
磊 子15 小时前
1.4CPU缓存一致性
java·spring cloud·缓存·系统
Tirzano16 小时前
超大型组和用户缓存redis
redis·缓存·哈希算法