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

相关推荐
小江的记录本1 小时前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
驕傲的兎孒1 小时前
基于 SpringBoot + Vue3 + AI 打造企业级售后服务支持平台 | 实战方案分享
人工智能·spring boot·后端
vx-程序开发1 小时前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php
難釋懷1 小时前
Redis分片集群手动故障转移
数据库·redis·缓存
无名-CODING1 小时前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
程序员老乔3 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#
码界奇点3 小时前
基于Spring Boot和MyBatis的图书管理系统设计与实现
spring boot·后端·车载系统·毕业设计·mybatis·源代码管理
Luna-player4 小时前
第3章 Spring Boot的Web应用支持,个人学习笔记
前端·spring boot·学习
召田最帅boy4 小时前
SpringBoot实现AI智能评论审核与自动回复
人工智能·spring boot·后端·架构