主题
面试速答(先看这里)
**一句话结论:**主动过期会在定时的去删除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同时过期,会导致其它key的读写效率降低
原因是因为Redis的主动过期定时任务也是在Redis的单线程模型中的主线程中执行的,也就是说如果出现了一批key同时过期,就需要删除大量的Key。那么因为命令执行是单线程的,所以这时候后面来的业务操作请求,就需要等这个删除命令执行完才可以处理业务请求。
那么这时候就会出现,业务访问延时增大的问题。
**如何解决这个问题呢?**有以下几个思路:
使用随机过期时间:如果可能的话,可以将键的过期时间随机分布,而不是在同一时间点过期。这样可以分散过期键删除的压力,避免大规模的键同时过期。同时也能避免缓存雪崩的问题。
使用被动删除:被动删除在每次访问的时候才会去删除key,并不会定时删除,不太容易发生大量key同时被删除的情况。但是被动删除可能会导致内存占用比较多。