redis过期策略
定时过期、惰性过期、定期过期
问题:使用expire key 60,在key60s之后key就会过期,之后如何清除key
定时过期
每个设置过期时间的key都创建一个定时器,到时间就会对key进行清除。该策略可以立即清除过期key,对内存友好,但是需要消耗大量的cpu时间去清理过期数据,从而影响响应时间和吞吐量。
惰性过期
只有当访问一个key时,才会判断这个key是否过期,过期就清除。该策略可以节省cpu资源,但是对内存不够友好。极端情况下会出现大量的过期key没有被清理,占用内存。
定期过期
每隔一段时间,扫描一定数量数据库中的expires字典中的key,清除过期的key。该策略是前两种的一个折中策略,cpu和内存达到最优平衡。
expires字典:当我们在 Redis 中设置一个键的过期时间时,该键会被添加到 expires 字典中,并在指定的过期时间后自动从数据库中删除。expires 字典以键为索引,值为键的过期时间戳。当 Redis 中的某个键过期时,Redis 服务器会在后台自动将其从数据库中删除。Redis 服务器使用定时器来监视 expires 字典中键的过期时间,定期检查键是否已过期。当键过期时,定时器会将其标记为即将删除,并在适当的时候释放该键所占用的内存空间。
redis采用的了惰性过期和定期过期两种过期策略,定期过期。