行业网站建站,太仓家政保洁公司,衡阳企业网站排名优化,WordPress纯代码添加这是一道经典的Redis面试题#xff0c;一个Redis中可能存在很多很多的key#xff0c;这些key中可能有很大一部分都有过期时间#xff0c;此时Redis服务器咋知道哪些key已经过期#xff0c;哪些还没过期呢#xff1f;
如果直接遍历所有的key#xff0c;这显然是行不通的一个Redis中可能存在很多很多的key这些key中可能有很大一部分都有过期时间此时Redis服务器咋知道哪些key已经过期哪些还没过期呢
如果直接遍历所有的key这显然是行不通的效率非常低
Redis整体的策略是定期删除和惰性删除相结合。
举个栗子假如我去小卖铺买东西付款的时候发现东西过期了。就告知老板于是老板下架此产品。消费者发现过期了才去下架这就叫惰性删除。小卖铺老板主动定期抽取一部分商品进行筛查这就叫定期删除。
一、惰性删除
假设这个key已经到了过期时间但是暂时还没删它key还存在。紧接着后面的一次访问正好用到了这个key于是这次访问就会让Redis服务器触发删除key的操作同时再返回一个nil。
二、定期删除
每次抽取一部分验证过期时间保证这个抽取检查的过程足够快。
为啥这里对于定期删除的时间有明确的要求呢因为Redis是单线程的程序主要的任务就是处理每个命令的任务如果扫描过期的时间过长就可能导致正常处理请求命令就被阻塞了。
注意虽然有了上述两种策略相结合整体效果一般。仍然可能会有很多过期的key被残留了没有被及时删除。Redis为了对上述进行补充还提供了一系列的内存淘汰策略~