Redis 深度解析:从入门到高并发架构实战(万字详解)
前言
在现代互联网系统中,无论是电商秒杀、社交平台、在线教育还是金融系统,几乎都离不开 Redis。
很多开发者认为 Redis 只是一个 Key-Value 缓存工具,但实际上 Redis 已经发展成为:
- 高性能缓存数据库
- 分布式锁实现方案
- 消息队列中间件
- 排行榜系统
- 实时统计系统
- 地理位置服务
- 流处理平台
甚至在很多互联网公司中:
MySQL负责存储数据
Redis负责承载流量
因此,掌握 Redis 已经成为 Java 后端工程师、架构师必备技能之一。
本文将从 Redis 的底层原理、数据结构、缓存设计、高并发场景、分布式锁、持久化、集群架构等多个角度进行全面剖析。
一、Redis简介
1.1 什么是Redis
Redis(Remote Dictionary Server)是一个:
基于内存的高性能 Key-Value 数据库
其特点:
- 开源
- 支持持久化
- 支持事务
- 支持发布订阅
- 支持Lua脚本
- 支持集群部署
官网:
https://redis.io
1.2 Redis为什么快
很多面试官喜欢问:
Redis为什么快?
原因主要有以下几点:
1、基于内存操作
MySQL:
select * from user where id=1
需要:
磁盘 -> 内存 -> CPU
Redis:
内存 -> CPU
速度差距:
磁盘:
10ms左右
内存:
100ns左右
差距超过:
100000倍
2、单线程模型
Redis核心命令执行:
单线程
很多人认为:
单线程一定慢
其实这是误区。
Redis瓶颈:
网络IO
内存读写
不是CPU计算。
单线程避免:
锁竞争
线程切换
上下文切换
反而效率更高。
3、IO多路复用
Redis采用:
epoll
select
kqueue
实现:
一个线程管理多个连接
流程:
客户端A
客户端B
客户端C
↓
epoll监听
↓
Redis主线程
因此可支撑:
10W+
并发连接
二、Redis数据类型详解
Redis面试最常考内容之一。
2.1 String
最常用类型。
存储结构
key -> value
例如:
set name zhangsan
获取:
get name
结果:
zhangsan
应用场景
缓存用户信息
set user:1001 '{"id":1001,"name":"Tom"}'
计数器
incr article:view:1
统计:
阅读量
点赞量
收藏量
2.2 Hash
类似Java中的Map。
存储结构
key
field -> value
例如:
hset user:1 name Tom
hset user:1 age 18
查询:
hget user:1 name
优势
相比String:
节省内存
方便更新部分字段
2.3 List
双向链表结构。
添加数据
lpush list 1
lpush list 2
lpush list 3
结果:
3 2 1
应用场景
消息队列
生产者:
lpush queue order
消费者:
rpop queue
2.4 Set
无序且唯一。
sadd user 1
sadd user 2
sadd user 3
重复元素:
sadd user 3
不会存储。
应用场景
用户标签
sadd vip_users 1001
sadd vip_users 1002
共同好友
sinter friendA friendB
2.5 Sorted Set(ZSet)
Redis最经典的数据结构。
内部:
Hash
+
SkipList(跳表)
添加:
zadd rank 100 Tom
zadd rank 90 Jack
zadd rank 95 Rose
查询排行榜:
zrevrange rank 0 9
应用场景
游戏排行榜
玩家 分数
Tom 100
Rose 95
Jack 90
热搜榜
微博热搜
抖音热榜
知乎热榜
三、Redis底层数据结构
很多人只知道:
String
Hash
List
但面试官问:
String底层是什么?
很多人就不会了。
3.1 SDS
Redis字符串:
Simple Dynamic String
不是C语言字符串。
C语言字符串
char *str="hello";
问题:
获取长度O(n)
容易缓冲区溢出
SDS
结构:
struct sdshdr{
int len;
int free;
char buf[];
}
优势:
获取长度O(1)
自动扩容
防止越界
四、Redis持久化机制
Redis默认存储:
内存
服务器重启:
数据丢失
因此需要持久化。
4.1 RDB
快照机制。
执行:
bgsave
生成:
dump.rdb
优点
恢复速度快
文件体积小
适合备份
缺点
可能丢失:
最后一次快照之后的数据
4.2 AOF
Append Only File。
记录:
写命令日志
例如:
set name Tom
set age 18
写入:
appendonly.aof
优点
数据安全
最多丢失:
1秒
缺点
文件较大
恢复较慢
4.3 如何选择
生产环境推荐:
RDB + AOF
组合方案。
五、Redis缓存设计
5.1 缓存穿透
什么是缓存穿透
请求:
查询id=999999
Redis不存在。
MySQL也不存在。
每次都访问数据库。
攻击场景
黑客:
1亿次不存在请求
数据库直接崩溃。
解决方案
方案1:缓存空对象
set user:999999 null
设置:
expire 300
方案2:布隆过滤器
流程:
请求
↓
BloomFilter
↓
Redis
↓
MySQL
不存在直接拦截。
六、缓存击穿
6.1 什么是击穿
热点Key:
商品详情
突然过期。
瞬间:
10000请求
全部打到数据库。
解决方案
互斥锁
synchronized
或者:
setnx lock
流程:
线程1查询数据库
线程2等待
线程3等待
七、缓存雪崩
7.1 什么是雪崩
大量缓存:
同时过期
例如:
100万Key
00:00统一失效
数据库瞬间崩溃。
解决方案
随机过期时间
错误:
3600
正确:
3600 + Random(300)
例如:
3698
3812
3921
避免同时失效。
八、Redis分布式锁
8.1 为什么需要分布式锁
单机:
synchronized
有效。
分布式:
服务A
服务B
服务C
无效。
8.2 Redis实现
加锁:
set lock_key uuid nx ex 30
解释:
NX:
不存在才创建
EX:
过期时间
Java代码:
Boolean success =
redisTemplate.opsForValue()
.setIfAbsent(
"lock",
uuid,
30,
TimeUnit.SECONDS
);
8.3 解锁问题
错误写法:
del lock
可能删除别人的锁。
正确写法:
Lua脚本。
if redis.call("get",KEYS[1])==ARGV[1]
then
return redis.call("del",KEYS[1])
else
return 0
end
保证原子性。
九、Redis事务
Redis事务:
MULTI
EXEC
WATCH
开始事务:
multi
执行命令:
set name Tom
set age 18
提交:
exec
注意:
Redis事务:
不支持回滚
这是面试高频题。
十、Redis主从复制
架构
Master
↓ ↓ ↓
Slave
Slave
Slave
作用:
读写分离
高可用
数据备份
配置:
replicaof 192.168.1.10 6379
十一、Redis Sentinel哨兵模式
问题:
Master挂了怎么办?
引入:
Sentinel
架构:
Sentinel
Sentinel
Sentinel
↓
Master
↓ ↓
Slave Slave
功能:
监控
监控主节点。
自动故障转移
Master挂了:
Slave升级Master
自动切换。
十二、Redis Cluster集群
为什么需要集群
单机限制:
CPU
内存
网络
Redis单节点:
几十GB
已经到极限。
Cluster方案
Redis:
16384
个槽位。
计算:
CRC16(key)%16384
例如:
user:1
计算:
slot=1000
存储到对应节点。
架构:
Node1
0~5000
Node2
5001~10000
Node3
10001~16383
十三、Redis面试高频问题
Redis为什么这么快?
回答:
1、纯内存操作
2、单线程模型
3、IO多路复用
4、高效数据结构
Redis和MySQL如何保证一致性?
方案:
先更新数据库
再删除缓存
即:
Cache Aside Pattern
流程:
update mysql
delete redis
延迟双删
update mysql
delete redis
sleep(500ms)
delete redis
解决并发问题。
十四、企业级Redis最佳实践
Key命名规范
推荐:
user:1001
order:20250501
product:1
避免:
abc
test
aaa
设置过期时间
避免永久缓存。
expire key 3600
大Key治理
避免:
1个Key
500MB
拆分:
user:1:page1
user:1:page2
热Key治理
热点数据:
明星直播
秒杀商品
热搜榜
采用:
本地缓存
Redis集群
多级缓存
十五、Redis在真实项目中的应用
在线教育平台
缓存:
课程详情
教师信息
章节目录
电商系统
缓存:
商品信息
库存信息
购物车
社交系统
缓存:
用户关系
粉丝列表
点赞记录
游戏系统
缓存:
排行榜
玩家在线状态
战绩统计
总结
Redis 已经不仅仅是一个缓存数据库,而是现代互联网系统中不可或缺的基础设施。
本文从:
- Redis核心原理
- 五大数据结构
- SDS底层实现
- 持久化机制
- 缓存穿透
- 缓存击穿
- 缓存雪崩
- 分布式锁
- 主从复制
- 哨兵模式
- Redis Cluster
- 企业级最佳实践
进行了全面分析。
对于 Java 后端开发岗位而言,Redis 已经成为面试必问技术栈。
如果你准备冲击:
✅ Java中级工程师
✅ Java高级工程师
✅ 架构师岗位
那么 Redis 的底层原理、缓存架构设计、高并发解决方案一定要深入掌握。
如果觉得本文对你有帮助,欢迎点赞、收藏、关注,后续将持续更新《Redis源码解析》《Redis面试宝典》《Redis高并发实战案例》等系列文章。 🚀
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)