redis过期键的删除策略
redis中的数据都是以k-v键值对的形式存储的,除此之外,redis还会维护一个具有过期键的字典,即expire字典,该字典的键的值为失效时间。 redis删除过期键有如下三种策略
1、定时删除
在设置过期键的时候会创建一个定时器,在键过期时间快要来的时候,执行定时器对键进行删除。
优点:会及时的删掉过期键,节约内存。缺点:当过期键比较多的时候会占用许多cpu时间,这会影响redis的响应时间和吞吐量,特别当此刻内存依然充足的话,cpu时间应该主要用于处理客户端的命令请求,而不是删除过期键。
2、定期删除
每隔一段时间检查一下redis中的过期键,并清除过期键。
优点:每隔一段时间执行一次删除过期键的操作,并会限制删除操作的时长和频率,这样可以有效的减少对cpu的影响,尽量做到不影响redis对客户端请求命令的执行。
缺点:需要根据redis服务器的具体情况,合理设置删除操作的执行频率和执行时长。
3、惰性删除
在使用到该键的时候会对该键进行过期检查,如果过期了,就对该键进行删除操作。
优点:惰性删除对cpu十分的友好。
缺点:对内存的话则十分不友好,当过期键非常多且又没有用到这些过期键的话,可能会导致内存泄漏。
综合上面的三种删除过期键的策略,redis使用定期和惰性相结合的过期键删除策略,这可以合理的使用cpu时间且避免的内存上的浪费。
redis内存淘汰策略
redis提供了6种淘汰策略 1、noeviction 禁止驱逐数据。默认配置都是这个。当内存使用达到阀值的时候,所有引起申请内存的命令都会报错。 2、volatile-lru:从设置了过期时间的数据集中挑选最近最少使用的数据淘汰。 3、volatile-ttl:从已设置了过期时间的数据集中挑选即将要过期的数据淘汰。 4、volatile-random:从已设置了过期时间的数据集中任意选择数据淘汰。 5、allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。 6、allkeys-random:从数据集中任意选择数据淘汰。