我 | 在这里
⭐ 全栈开发攻城狮、全网11W+粉丝、2022博客之星后端领域Top1、专家博主。
🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60+位同学顺利毕业
✈️个人公众号:乡下小哥编程。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G+ 教程资料,以及大量毕设项目源码。
🐬专注干货知识分享、项目实战案例开发分享
🚪 传送门:[Github毕设源码仓库](https://github.com/zhengyuzh)
传送门:详细文章介绍说明~
在实际开发中,Redis 已不仅仅是一个「缓存工具」,它已经成为支撑高并发、高可用系统的重要基石。今天就结合一个实际的项目案例,带你一步步了解 Redis 如何在后端系统中发挥关键作用。
💡 为什么选择 Redis?
在传统系统中,数据库往往成为性能瓶颈,而 Redis 拥有以下特点,使其成为“性能加速器”:
- 极快的读写速度(内存存储 + 单线程模型)
- 丰富的数据结构(String、List、Hash、Set、ZSet)
- 支持持久化(RDB、AOF)
- 天然支持分布式(主从复制 + 哨兵 + 集群)
- 支持过期与淘汰机制
🧪 实战场景:商品浏览缓存优化
项目背景
你正在开发一个电商类系统,用户访问商品详情页时,频繁查询数据库会造成性能压力,尤其是在商品数量和访问量都很高的场景下。
技术目标
通过 Redis 缓存商品详情数据,减少数据库压力,提升页面响应速度。
🏗 技术选型
- Spring Boot
- Redis(使用
spring-boot-starter-data-redis
) - 工具类:
Hutool
+Jackson
+Lettuce
🔧 核心代码实现
1. 引入 Redis 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置 Redis 连接
spring:
redis:
host: localhost
port: 6379
password: your_password
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 2
time-between-eviction-runs: 10s
3. 缓存商品详情逻辑(带过期时间)
@Autowired
private StringRedisTemplate stringRedisTemplate;
public ProductDTO getProductById(Long productId) {
String key = "product:" + productId;
// 先查 Redis
String cache = stringRedisTemplate.opsForValue().get(key);
if (StrUtil.isNotBlank(cache)) {
return JSONUtil.toBean(cache, ProductDTO.class);
}
// 查数据库
Product product = productMapper.selectById(productId);
if (product == null) {
return null;
}
ProductDTO dto = BeanUtil.copyProperties(product, ProductDTO.class);
// 存 Redis,设置10分钟过期
stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(dto), Duration.ofMinutes(10));
return dto;
}
🧠 实战总结
- 热点数据缓存:通过 Redis 缓存热点数据(如商品、用户信息等),能显著降低数据库访问频率。
- 过期策略:设置合理 TTL 避免缓存穿透/雪崩,可结合加锁、异步重建等方式进行优化。
- Redis 工具封装:建议将 Redis 操作封装成通用组件(如缓存服务),提高复用性和可维护性。
- 监控与调优:借助 Redis Insight、慢查询日志等工具分析运行状况,及时优化 key 设计和使用方式。
📌 延伸思考
- 如何实现 缓存击穿防护?
- 多线程并发时如何控制缓存的 一致性与并发写入问题?
- 如何结合 Redis + 本地缓存 实现多级缓存架构?
- 利用 Redis 实现分布式锁、队列、排行榜、限流等高级功能?
📝 结语
Redis 已经成为现代高性能后端架构的“标配”,掌握它,不仅可以优化你的代码性能,还能提升整个系统的稳定性与扩展性。希望今天的实战案例对你有所启发!
🧱 Redis 简单架构图(单机/主从/集群)
[客户端]
|
V
[Redis Proxy或客户端分片逻辑](可选,集群下存在)
|
V
-------------------------
| Redis | —— 单机架构
-------------------------
-------------------------
| Master |<---Read---| Slave(只读)
| Redis |---Replicate--->| Redis —— 主从架构
-------------------------
----------------- ----------------- -----------------
| Master Node 1 | | Master Node 2 | | Master Node 3 | —— 集群架构
| + Slots 0~5k | | + Slots 5k~10k | | + Slots 10k~16k|
| + Slave A | | + Slave B | | + Slave C |
----------------- ----------------- -----------------
🔍 架构模式说明
✅ 1. 单机模式
- 最简单,所有数据存储在一个 Redis 实例。
- 适合开发/测试环境。
- 不具备高可用能力。
✅ 2. 主从复制(Master-Slave)
- 主节点负责读写,从节点负责读,提高读并发。
- 当主节点挂掉时可以通过 哨兵模式(Sentinel) 自动转移主节点。
- 适合中等规模的应用,兼顾读写分离和高可用。
✅ 3. 集群模式(Cluster)
- 数据分布在多个节点(分片存储),每个节点负责一部分 key 的存储(哈希槽 slot)。
- 每个主节点有一个或多个从节点,实现高可用 + 高扩展。
- 适合大规模、高并发、大数据量场景。
🔧 客户端访问流程简述(以集群为例)
- 客户端向任意 Redis 节点请求 key。
- Redis 节点根据 hash槽分布,跳转到正确的主节点。
- 主节点返回数据,或者请求失败时跳转至备节点读取。
- 节点宕机后,从节点可以升级为主节点,实现自动故障恢复(高可用)。
💡 Redis 架构常见扩展
能力 | 描述 |
缓存 | 高频数据缓存,如商品详情、用户信息等 |
锁机制 | 利用 SETNX 实现分布式锁,防止并发写冲突 |
队列 | List 结构用于异步任务队列、消息通知等 |
限流 | 结合 Lua 脚本、计数器实现高效限流机制 |
排行榜 | ZSet 实现实时积分、排行榜等复杂结构 |
Session共享 | Web项目中实现会话一致性,替代本地 Session |