前言
Redis 是内存型 NoSQL 数据库,凭借高性能、丰富数据结构,成为后端标配中间件,主要用于热点缓存、分布式锁、限流、消息队列。本文从基础数据结构到两大核心业务场景完整实战。
一、Redis 五大基础数据结构实战
- String 字符串(缓存、计数器、验证码)
SET user:1:name 张三 EX 3600 GET user:1:name INCR order_count- Hash 哈希(存储对象,用户信息、商品)
HSET user:2 id 2 name 李四 phone 13800001111 HGETALL user:2- List 列表(消息队列、栈)
- Set 集合(去重、点赞、好友列表)
- ZSet 有序集合(排行榜、积分排名)
二、核心场景 1:热点缓存(Cache-Aside)
流程:先查 Redis,命中直接返回;未命中查询 MySQL,写入缓存再返回;更新数据先改数据库,删除缓存。
// 伪代码 String key = "goods:" + goodsId; String data = redis.get(key); if(data == null){ Goods goods = mapper.selectById(goodsId); redis.setEx(key, 3600, JSON.toString(goods)); }三、核心场景 2:分布式锁(解决集群并发超卖)
1. 基础 SETNX 锁(单机)
SET lock:stock 1 NX EX 10 DEL lock:stock2. Redisson 分布式锁(生产推荐)
自动续期、可重入、防死锁,适配集群 / 哨兵,解决库存超卖、重复下单。
四、三大缓存问题解决方案
缓存穿透:缓存空值 / 布隆过滤器
缓存击穿:互斥锁、逻辑过期
缓存雪崩:过期时间随机偏移、集群高可用
五、Redis 运维规范
- 热点 key 拆分,避免大 key;
- 业务 key 统一前缀
业务:类型:id; - 禁止永久 key,设置过期时间;
- 高并发场景使用 Redis 集群主从 + 哨兵。