缘起,今天被一哥们问到redis的失效时间是怎么实现的,有哪些过期策略?
我听完这个问题的反应 ======》》》》黑人问号脸,你在说啥啊老哥。
回来后自己查查吧,这个问题应该是属于知识面的问题,理解起来应该不难。
redis采用两个过期策略来过期他的key:懒汉式删除+定期删除
懒汉式删除流程:
当有客户端想要操作,比如get或者setnx这个key的时候,那么这个时候会检查下这个key是否已经过期,如果已经过期了,则直接删除,也不再执行操作命令;如果没有过期,那么就继续执行操作命令。
的确很像一个懒汉,和我自己差不多,袜子一定是要到明天没得穿了才会去洗。这个懒汉一定也是发现有命令想要操作这个key的时候才去看看这个key有没有过期。
定期删除流程:
会遍历每个数据库,redis中默认会有16个数据库。
默认是每个库检查20个key,注意相当于该循环执行20次,循环体是下边的描述:
如果在一个库中没有设置了过期时间的key,那就直接遍历下一个数据库;如果有,获取该key,检查是否过期,如果过期,则删除;判断删除操作是否达到指定时长,如果达到,则退出。
我的个人博客 http://generalcode.cn/archives/131