第十四课 · 实战篇: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 不是用来存数据的,
而是用来让系统"更快、更稳、更抗压"的。

相关推荐
Flittly15 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
人活一口气20 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
Java陈序员2 天前
企业级!一个基于 Java 开发的开源 AI 应用开发平台!
spring boot·agent·mcp
杨运交2 天前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
用户3074596982073 天前
Redis 延时队列详解
redis
烤代码的吐司君3 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
Flittly3 天前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt4 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫5 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
leeyi5 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent