🚀 什么时候该用 Redis?一个 Python 实战案例讲清楚
在做后端开发时,你一定遇到过这些问题:
- 接口越来越慢,数据库扛不住
- 热点数据被反复查询
- 需要做排行榜、计数器、限流
- 用户登录状态不好管理
这时候,大概率就该 Redis 出场了。
但问题是——
👉 Redis 不是银弹,到底什么时候该用?
这篇文章我们用“场景 + 代码”的方式,一次讲透。
一、Redis 是什么(用一句话讲明白)
Redis 本质是:
👉 一个“超快的内存数据库”,专门用来处理高频、低延迟的数据操作
特点:
- 读写极快(微秒级)
- 支持多种数据结构(字符串、列表、集合、哈希等)
- 可设置过期时间(TTL)
- 天然适合高并发场景
二、什么时候该用 Redis?
不是所有项目都需要 Redis,但下面这些情况,非常适合用👇
1️⃣ 缓存(最常见)
👉 典型问题:
数据库查询太慢 or 压力太大
👉 解决方案:
把热点数据放进 Redis
2️⃣ 登录状态 / Session 存储
👉 比如:
3️⃣ 计数器 / 点赞 / 浏览量
👉 Redis 原子自增:
INCR
非常适合:
4️⃣ 排行榜
利用:
可以轻松实现:
5️⃣ 限流(防刷接口)
👉 场景:
6️⃣ 分布式锁
👉 防止多个服务同时操作同一资源
三、一个真实场景:缓存商品详情页
我们用一个最经典的案例来讲清楚👇
🎯 场景描述
电商系统:
- 商品详情页访问量巨大
- 每次都查 MySQL → 很慢
- 高峰期数据库扛不住
🧠 解决思路(缓存模式)
流程:
用户请求 → Redis查
↓
有 → 直接返回(快)
无 → 查数据库 → 写入Redis → 返回
四、Python 实战代码(Redis 缓存)
我们用 redis-py 来实现👇
1️⃣ 安装依赖
pip install redis
2️⃣ 示例代码
import redis
import json
import time
# 连接 Redis
r = redis.Redis(host='localhost',
port=6379, db=0,
decode_responses=True)
# 模拟数据库
def get_product_from_db(product_id):
print("👉 查询数据库...")
time.sleep(2) # 模拟慢查询
return {
"id": product_id,
"name": "iPhone 15",
"price": 7999
}
def get_product(product_id):
key = f"product:{product_id}"
# 1️⃣ 先查 Redis
cached = r.get(key)
if cached:
print("🚀 命中缓存")
return json.loads(cached)
# 2️⃣ 缓存没有 → 查数据库
product =
get_product_from_db(product_id)
# 3️⃣ 写入Redis(设置过期时间60秒)
r.setex(key, 60,
json.dumps(product))
return product
# 测试
print(get_product(1))
print(get_product(1))
3️⃣ 运行效果
第一次请求:
👉 查询数据库...
第二次请求:
🚀 命中缓存
👉 性能直接起飞
五、进阶:缓存设计要注意什么?
很多人用 Redis 会踩坑,这几个点一定要注意👇
⚠️ 1. 缓存穿透
👉 问题:
查询一个不存在的数据,每次都打数据库
👉 解决:
⚠️ 2. 缓存雪崩
👉 问题:
大量 key 同时过期 → 数据库被打爆
👉 解决:
⚠️ 3. 缓存击穿
👉 热点 key 过期瞬间,大量请求打 DB
👉 解决:
六、什么时候不该用 Redis?
很重要的一点👇
👉 不要滥用 Redis
不适合的情况:
- 数据必须强一致(金融核心交易)
- 数据量巨大(内存扛不住)
- 低频访问数据
七、总结(面试也能用)
一句话总结 Redis 使用场景:
👉 “高频访问 + 低延迟要求 + 可接受最终一致性”的场景
八、最后给你一个判断口诀
记住这 4 条:
👉 慢不慢?(性能瓶颈)
👉 热不热?(热点数据)
👉 稳不稳?(高并发)
👉 能不能丢一点精确性?
如果答案是:
✅ 慢
✅ 热
✅ 并发高
✅ 可以接受缓存
👉 那就上 Redis