redis会把设置了过期时间的key单独放入一个字典里,在key过期时并不会立刻删除它。而是通过2种过期策略,来删除过期的key。
1、惰性删除:客户端访问某个key时,redis会检查这个key是否过期,若过期则删除这个key。
2、定期扫描:redis默认每秒执行10次过期扫描。
扫描策略如下:
1、从过期字典中随机选择20个key。
2、删除这20个key中过期的key。
3、如果过期的key的比列超过25%,则重复步骤1。
惰性删除有一个弊端。若某个过期的key一直不被访问,则会一直保存在内存中。这样的key若累计过多,对内存也是一个不小的消耗。