Redis过期键删除策略
过期键删除策略
删除策略的探讨
目前来讲,删除过期键有三种策略
定时删除
为每一个设置了过期时间的键,都创建了一个定时器,到了指定的时间了立即就给删除。其优点是最大程度的节约了内存空间,可以实现让数据库中不存在一条过期键来占用内存。缺点也是显而易见的,不同的key有不同的过期时间,随时都可能占用cpu资源去删除过期键,这对于redis的其他业务处理和吞吐量都不太友好,就类似于在JVM中频繁的full gc,对应用性能影响是很大的。
惰性删除
惰性删除,就是在每次访问到过期键的时候再对其进行删除。优点是不会额外的去占用cpu资源,毕竟每次删除过期键的时候都是正儿八经程序去访问的时候,正常的业务处理。缺点就是不可能所有过期键都能被访问到,长此以往,数据库中会残留大量的过期键来占用内存。
定期删除
定期删除机制实际上在性能层面是定时删除和惰性删除的一种中和机制,毕竟计算机领域大部分情况都没有一种完美的解决方案,大佬们做的事情就是让极端的事情能够中和一下。定期删除就是仅在指定的周期,比如每五分钟,每一个小时这样,去删除过期键。其优点呢就是平衡了CPU资源和内存资源,既能够保证这些过期键一定会被删除到,也能降低了删除过期键的频率。缺点是对于这个删除周期的选择以及每次删除的数据量都需要根据业务实际情况进行自定义的配置。
Redis使用的过期策略
Redis使用的是定期删除和惰性删除结合起来的策略。其中惰性删除很好理解,redis操作每个key的时候都会先进行过期时间判断,如果过期就删除。定期删除是跟随Redis的周期性操作,在规定的时间内,分多次遍历各个数据库,每次从过期字典中随机抽取指定数量过期键并将其删除。
Redis使用的过期策略
Redis使用的是定期删除和惰性删除结合起来的策略。其中惰性删除很好理解,redis操作每个key的时候都会先进行过期时间判断,如果过期就删除。定期删除是跟随Redis的周期性操作,在规定的时间内,分多次遍历各个数据库,每次从过期字典中随机抽取指定数量过期键并将其删除。