惰性删除:只有访问这个键时才会检查它是否过期,如果过期则清除。优点:最大化地节约CPU资源。缺点:如果大量过期键没有被访问,会一直占用大量内存。
定时删除
Redis会将设置了过期时间的key放入一个独立的字典中,以后会定时遍历这个字典来删除过期的key。
Redis默认每秒进行10次过期扫描。
过期扫描不会遍历过期字典中所有的key,而是采用一种简单的贪心策略。步骤如下:
1.先从过期字典中随机选出20个key
2.删除这20个key中已经过期的key
3.如果过期的key的比例操作25%,就重复步骤1
为了保证过期扫描不会出现循环过度,导致线程卡死的现象, 算法 还增加了扫描时间的上限,默认不会超过25ms。