- 定期删除
每隔一段时间(默认100ms)就随机抽取一些设置了过期时间内的key,检查其是否过期,如果有过期就删除。之所以这么做,是为了通过限制删除操作的执行时间内和频率来减少对cpu的影响,不然每隔100ms就要遍历所有设置过期时间的key,会导致cpu负载太大。
- 惰性删除
不主动删除过期key,每次从数据库访问过期key时,都检测key是否过期,如果过期就删除该key。惰性删除有一个问题,如果这个key已经过期了,但是一直没有被访问,就会一直保存再数据库中。
以上原理告诉我们,Redis过期删除是不精确的,惰性删除更是在某些场景下不可用,key过期无法保证立刻删除。