一、Redis为什么这么香?(基础必看)
Redis这个单线程的"老伙计"凭什么在内存数据库界称王?先来几个硬核知识点镇场子!
- 变态级速度:纯内存操作+IO多路复用(epoll模型),单机QPS轻松破10万!(别被单线程骗了,人家把CPU用到了极致)
- 数据结构大杀器:5种基础类型+4种高级结构,从简单的String到复杂的Stream类型,总有一款适合你
- 持久化双保险:RDB快照+AOF日志双剑合璧(注意:新版混合持久化更香!)
- 分布式全家桶:哨兵、集群、Codis三大方案任君选择
举个栗子🌰:用ZSET
实现电商实时排行榜,10万级数据排序只要3ms!这性能,MySQL看了直摇头…
二、Redis进阶灵魂拷问(高手过招)
2.1 缓存三连击问题
缓存穿透:黑客疯狂查不存在的数据怎么办?
→ 布隆过滤器+空值缓存双缓冲!
(真实案例:某电商用布隆过滤器拦截了99.8%的无效请求)
缓存击穿:热点key突然失效引发雪崩?
→ 互斥锁+永不过期策略(注意:别忘了后台异步更新!)
缓存雪崩:大批key同时失效怎么破?
→ 随机过期时间+熔断降级+多级缓存架构
(敲黑板:别用固定expire时间!)
2.2 持久化方案选型
RDB vs AOF 世纪对决:
- RDB:二进制快照,恢复快但可能丢数据
- AOF:日志追加,数据更安全但文件大
2023新版解决方案:
aof-use-rdb-preamble yes
开启混合模式,兼顾速度与安全!
2.3 集群模式实战
Redis Cluster搭建五要诀:
- 16384个槽位必须分配完
- 主从节点交叉部署(避免单机房故障)
- 合理设置
cluster-node-timeout
- 客户端必须支持重定向
- 监控集群状态用
redis-cli --cluster check
三、Redis高频场景题(手撕代码)
3.1 分布式锁实现
public boolean tryLock(String key, String value, long expireTime) {
return "OK".equals(jedis.set(key, value, "NX", "EX", expireTime));
}
(注意:别忘了用Lua脚本保证原子性解锁!)
3.2 延迟队列方案
用ZSET实现精准延时:
# 添加任务
zadd delay_queue <执行时间戳> task_data
# 消费任务
while True:
tasks = zrangebyscore delay_queue 0 <当前时间戳> limit 0 1
if tasks:
if zrem delay_queue tasks[0] > 0:
handle_task(tasks[0])
3.3 热点数据发现
使用redis-cli --hotkeys
找热点key(需要先配置CONFIG SET maxmemory-policy allkeys-lfu
)
四、Redis性能调优黑科技
-
内存优化三板斧:
- 用
ziplist
压缩小数据 - 开启
jemalloc
内存分配器 - 定期运行
MEMORY PURGE
- 用
-
网络调优秘籍:
# 修改系统参数 echo net.core.somaxconn=65535 >> /etc/sysctl.conf echo vm.overcommit_memory=1 >> /etc/sysctl.conf
-
监控预警体系:
- 使用Prometheus+Granfana监控QPS、内存、命中率
- 设置慢查询阈值:
config set slowlog-log-slower-than 10000
五、Redis6/7新特性(弯道超车点)
-
多线程IO:6.0版开启后性能提升3倍!
io-threads 4 io-threads-do-reads yes
-
客户端缓存:服务端支持push模式(省带宽利器)
-
ACL权限控制:告别裸奔时代!
ACL SETUSER devuser on >devpass ~* +@all
-
Function特性:用Lua写存储过程更方便了
六、面试反杀技巧(逆袭必看)
当面试官问"Redis有什么缺点?"时,你可以这样秀:
“Redis虽然快,但内存成本高,我们项目采用热点数据放Redis+冷数据放磁盘的混合存储方案。另外在ACK机制上,虽然Redis提供WAIT命令,但在极端网络分区时仍需业务层做补偿…”
(瞬间逼格提升200%!)
最后说两句
Redis就像瑞士军刀——功能多但要用对场景!记住:
- 缓存数据别超过内存的60%
- 集群节点最好用奇数个
- 禁用KEYS命令(除非你想体验线上事故)
建议自己动手搭个Redis集群试试,纸上得来终觉浅!(别问我怎么知道的,说多了都是泪…)