redis面试总结
- 面试官: redisson的看门狗机制是怎么实现的
- 我:
Redisson 的看门狗机制就是通过 HashedWheelTimer 创建一个后台定时任务,每 10 秒续约一次 Redis 锁的 TTL,从而保证业务未完成时锁不会被误释放。
实现原理:- 设置定时任务,每十秒检查一次
- 如果锁存在且线程id是当前线程id,则重置过期时间
🧪看门狗续期过程图示:1
2
3
4
5
6
7
时间轴(秒):
|--0----10----20----30----40----50----60---->
| 加锁 🔁 🔁 🔁
| ↑ ↑ ↑
| 续期 续期 续期
- 面试官: 什么是BigKey
我:
- 定义:单个键对应的数据量非常大,无论是字符串值很长,还是集合/列表等容器类型包含大量元素。
- 影响:大 key 会导致 内存占用高、网络传输慢、阻塞事件循环、集群迁移困难 等一系列性能和稳定性问题。
- 解决:
- 拆分成多个KV,比如一个 10MB 的 JSON,拆成多个 user:1001:part:1、user:1001:part:2。
- 定期清理
面试官: redis的持久化机制有哪些?
我:
- RDB: 每过一段时间会将数据通过子线程写入磁盘中
- 优点:性能要求小,恢复速度快
- 缺点:在上一次快照之后宕机,数据会丢失。
- AOF:记录每一条写命令和删除命令,将每次写命令(set、hset、lpush 等)追加到 AOF 文件末尾。
- 优点:丢失数据的可能性小
- 缺点: 占用内存大,性能要求高
- RDB: 每过一段时间会将数据通过子线程写入磁盘中
面试官: 持久化有两种,那么该怎么选择呢?
我:
采用RDB+AOF组合的方式: 恢复数据的时候先通过RDB去恢复,AOF只记录在上一次快照之后的写操作,然后AOF在恢复
面试官: redis的分片集群(Redis Cluster 模式)有了解吗
- 我:
分片:把全量 key 按某种算法拆分成多个片段,每个片段放在不同的 Redis 实例中。
- 数据分片:
- Redis 集群固定有 16384 个槽位(编号 0 ~ 16383)。
- 每个槽位分配给某个主节点(Master)。
- Key 存储时:
- 计算key的哈希值,获取槽位号,存入槽位所在的主节点
1
2
3槽位 0-5460 -> Master A
槽位 5461-10922 -> Master B
槽位 10923-16383 -> Master C
- 计算key的哈希值,获取槽位号,存入槽位所在的主节点
- 读写流程:
- 客户端可惜向任意节点读取信息
- 如果数据正好在该节点,则读取数据
- 如果不在该节点,则返回数据所在的节点的信息,重新读取
- 客户端可惜向任意节点读取信息
- 数据分片:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Little Monste'Blog!
评论






