前言
前段时间刷脉脉的时候,刷到了这样一个面试题:为什么大量Key过期的时候,会影响整个redis服务的延迟
如果你是面试者,你会怎么回答?
如果你只知道redis是一个单线程reactor模型,你可能会回答:因为redis是单线程模型,所以是因为处理删除key的事件耗时过长而导致其他事件排队引起延迟增加
这个回答能让面试官满意吗?可能还不够,他也许会继续问你:那redis主动处理过期key的时机是什么时候?处理的逻辑是什么?最坏情况下会增加多少延迟?如何判断是因为过期key而导致的延迟抖动?如何解决这个问题?
同样的,当时看到脉脉帖子上的回答,我也觉得不够完整,所以索性带着这些问题翻了下redis的源码。