侧边栏壁纸
博主头像
ZOUXS的空间博主等级

人生苦短,我学python

  • 累计撰写 23 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Redis 知识点

zouxs
2026-05-22 / 0 评论 / 0 点赞 / 6 阅读 / 6466 字
温馨提示:
本文最后更新于 2026-05-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

目录

  1. Redis 单线程为什么快
  2. Redis 过期策略与内存淘汰
  3. Redis 持久化 RDB/AOF/混合模式
  4. 缓存穿透
  5. 缓存击穿
  6. 缓存雪崩
  7. Redis 分布式锁
  8. Redis 高频面试扩展知识点

1. Redis 单线程为什么快

1.1 纯内存操作

  • 所有数据在内存中,读写速度微秒级,比磁盘快 1000 倍以上。

1.2 IO 多路复用

  • 单线程监听多个套接字,非阻塞 IO,能同时处理上万连接。

1.3 无锁、无线程切换

  • 单线程避免锁竞争、线程切换、上下文消耗,CPU 利用率极高。

1.4 高效数据结构

  • SDS、压缩列表、跳表、哈希表等均为高效设计,读写复杂度低。

1.5 面试总结(必背)

Redis 快 = 内存 + IO多路复用 + 单线程无锁 + 高效数据结构,特别适合高并发读写。


2. Redis 过期策略与内存淘汰机制

2.1 惰性删除

  • 访问 key 时才检查是否过期,过期则删除。
  • 优点:节省CPU。
  • 缺点:大量冷数据过期不删,浪费内存。

2.2 定期删除

  • 每隔一段时间随机抽取一批 key 检查并删除过期 key。
  • 平衡 CPU 与内存。

2.3 内存淘汰策略(当内存满时)

  • volatile-lru:对设置了过期时间的 key 使用 LRU 淘汰。
  • allkeys-lru:所有 key 中淘汰最少使用的(企业最常用)。
  • volatile-lfu:淘汰使用频率最低。
  • allkeys-lfu:全键 LFU。
  • volatile-random:随机删除。
  • noeviction:不删除,直接报错(默认)。

3. Redis 持久化

3.1 RDB 快照

  • 定时把内存数据全量保存到磁盘。
  • 优点:文件小、恢复快、适合备份。
  • 缺点:两次快照之间宕机会丢数据

3.2 AOF 日志

  • 记录每一条写命令,类似 MySQL binlog。
  • 优点:数据安全、最多丢1秒数据。
  • 缺点:文件大、恢复慢、阻塞风险。

3.3 混合持久化(企业标准)

  • RDB + AOF 结合。
  • 恢复时:先加载 RDB,再重放 AOF。
  • 优点:速度快 + 数据安全,Redis 4.0+ 推荐。

4. 缓存穿透

4.1 定义

查询根本不存在的数据,缓存不命中,直接打到数据库。

4.2 现象

  • 缓存命中率极低。
  • 数据库CPU/连接暴增。
  • 常见于恶意攻击。

4.3 排查

  • 监控缓存命中率。
  • 查看请求参数是否为无效ID、负数、不存在值。
  • 日志高频出现相同无效查询。

4.4 解决方案

  1. 参数校验:过滤非法ID。
  2. 空值缓存:缓存不存在的key,设置短过期。
  3. 布隆过滤器:预先白名单,不存在直接拒绝。
  4. 接口限流:防止恶意刷接口。

5. 缓存击穿

5.1 定义

一个极高热点 key 过期,瞬间大量请求打到数据库。

5.2 现象

  • 数据库瞬间负载飙升。
  • 接口大量超时。

5.3 排查

  • 监控热点 key。
  • 查看同一 key 集中过期。

5.4 解决方案

  1. 互斥锁(分布式锁):只让一个请求去更新DB。
  2. 热点 key 永不过期
  3. 后台定时主动刷新

6. 缓存雪崩

6.1 定义

大量 key 同一时间过期Redis 宕机,所有请求打到DB。

6.2 现象

  • 数据库崩溃、服务不可用。

6.3 解决方案

  1. 过期时间加随机值,避免批量同时过期。
  2. 多级缓存:本地缓存 + Redis。
  3. Redis 集群/哨兵,避免单点故障。
  4. 服务限流、熔断、降级
  5. 缓存预热

7. Redis 分布式锁

7.1 基本命令

SET lock_key unique_value NX PX 30000
  • NX:仅不存在时设置(互斥)。
  • PX:毫秒级过期,防止死锁。

7.2 防误删(核心)

  • Lua 脚本保证“判断+删除”原子性。
  • 避免线程A锁过期,被线程B删除。

7.3 锁续期

  • 使用 Redisson 自动续期(看门狗机制)。

7.4 适用场景

  • 库存扣减、订单提交、支付、并发修改、重复提交。

8. Redis 高频面试扩展知识点

8.1 Redis 线程模型

  • 6.0 开始支持 多线程 IO,但执行命令依然单线程。
  • 目的:提高网络吞吐量,不破坏原子性。

8.2 缓存与数据库一致性

  • 先更新数据库,再删除缓存
  • 不建议更新缓存,避免并发脏数据。

8.3 典型应用场景

  • 热点数据缓存
  • 分布式锁
  • 限流
  • 计数器、排行榜
  • 会话存储
  • 消息队列

8.4 集群方案

  • 主从复制
  • 哨兵(高可用)
  • Redis Cluster(分片集群)

8.5 面试必背总结

Redis 是高并发缓存中间件,核心解决数据库压力; 穿透/击穿/雪崩是三大经典问题; 分布式锁是支付、订单、库存必备; 企业标配:混合持久化 + 集群 + 主从 + 哨兵

相关链接

0

评论区