Skip to content

面试速答(先看这里)

**一句话结论:**主动过期会在定时的去删除key,那么带来一个问题,那就是:Redis中如果有一批key同时过期,会导致其它key的读写效率降低

60秒标准回答:

Redis的键有两种过期方式:一种是被动过期,另一种是主动过期

主动过期会在定时的去删除key,那么带来一个问题,那就是:Redis中如果有一批key同时过期,会导致其它key的读写效率降低

原因是因为Redis的主动过期定时任务也是在Redis的单线程模型中的主线程中执行的,也就是说如果出现了一批key同时过期,就需要删除大量的Key。那么因为命令执行是单线程的,所以这时候后面来的业务操作请求,就需要等这个删除命令执行完才可以处理业务请求

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**Redis的键有两种过期方式:一种是被动过期,另一种是主动过期。
  • **要点2:**原因是因为Redis的主动过期定时任务也是在Redis的单线程模型中的主线程中执行的,也就是说如果出现了一批key同时过期,就需要删除大量的Key。
  • **要点3:**如何解决这个问题呢?
  • **要点4:**使用随机过期时间 :如果可能的话,可以将键的过期时间随机分布,而不是在同一时间点过期。
  • **要点5:**使用被动删除 :被动删除在每次访问的时候才会去删除key,并不会定时删除,不太容易发生大量key同时被删除的情况。

**记忆锚点:**key → Redis → 同时也能避免缓存 → 的单线程模型 → 中的主线程 → Key

易错提醒:

  • 这样可以分散过期键删除的压力,避免大规模的键同时过期。
  • 使用被动删除 :被动删除在每次访问的时候才会去删除key,并不会定时删除,不太容易发生大量key同时被删除的情况。

加分表达:

  • 主动过期会在定时的去删除key,那么带来一个问题,那就是:Redis中如果有一批key同时过期,会导致其它key的读写效率降低 原因是因为Redis的主动过期定时任务也是在Redis的单线程模型中的主线程中执行的,也就是说如果出现了一批key同时过期,就需要删除大量的Key。
  • 有以下几个思路: 使用随机过期时间 :如果可能的话,可以将键的过期时间随机分布,而不是在同一时间点过期。

追问准备:

  • 围绕「key」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Redis」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「同时也能避免缓存」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

📄 ✅Redis中key过期了一定会立即删除吗

打开文档:✅Redis中key过期了一定会立即删除吗

Redis的键有两种过期方式:一种是被动过期,另一种是主动过期。

主动过期会在定时的去删除key,那么带来一个问题,那就是:Redis中如果有一批key同时过期,会导致其它key的读写效率降低

原因是因为Redis的主动过期定时任务也是在Redis的单线程模型中的主线程中执行的,也就是说如果出现了一批key同时过期,就需要删除大量的Key。那么因为命令执行是单线程的,所以这时候后面来的业务操作请求,就需要等这个删除命令执行完才可以处理业务请求。

那么这时候就会出现,业务访问延时增大的问题。

**如何解决这个问题呢?**有以下几个思路:

使用随机过期时间:如果可能的话,可以将键的过期时间随机分布,而不是在同一时间点过期。这样可以分散过期键删除的压力,避免大规模的键同时过期。同时也能避免缓存雪崩的问题。

使用被动删除:被动删除在每次访问的时候才会去删除key,并不会定时删除,不太容易发生大量key同时被删除的情况。但是被动删除可能会导致内存占用比较多。

​