• 面试官: 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+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
    • 读写流程:
      • 客户端可惜向任意节点读取信息
        • 如果数据正好在该节点,则读取数据
        • 如果不在该节点,则返回数据所在的节点的信息,重新读取