Redis系列2---redis对过期键的处理

168 阅读2分钟

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:从数据集中任意选择数据淘汰。

注意:主从结构,过期键的删除是由主服务器操作的,主服务器删除后会给从服务器发一个DEL命令。从服务器不会主动删除删除过期键。