hello,我是小零。和你一样的开发者。
Redis的键删除策略一共有三种:
1. 定期删除:Redis默认每隔100ms就会随机抽取一些设置过期时间的key进行检测,如果过期就进行删除。定期删除其实是惰性删除和定时删除的一个折中的方案,可以根据自定义扫描时间来控制(redis.conf通过设置hz选项来设置时间扫描时间间隔),主要为了兼顾cpu和内存而做出的权衡。2. 定时删除:在设置键的过期时间的同时,设置一个定时器,当键过期的同时,定时器立马就把这个键进行删除。定时删除对内存是友好的,它可以提高内存的利用率,但对cpu是不友好的,如果某一个时间大量的key过期,这时候删除操作就会过多,消耗了过多的cpu资源。
3. 惰性删除:key过期后继续留在内存中,当某个请求,请求到这个key的时候,再判断这个key是否过期,如果过期就进行删除,如果没有过期就进行返回。惰性删除对cpu是友好的,但对内存是不友好的。如果过期的键很多,且很长时间没有进行访问,这将会消耗很多内存。
redis默认采用了定期+惰性删除的策略,当内存利用超过redis.conf设置的maxmemory的设定值时,就会触发删除策略。