Redis数据过期策略

半兽人 发表于: 2016-07-13   最后更新时间: 2022-10-11 11:13:47  
{{totalSubscript}} 订阅, 4,932 游览

场景

在 redis 中,允许用户设置最大使用内存大小maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,以减少内存紧张的情况,由此获取更为稳健的服务。

驱逐策略

当Redis内存数据集的大小到达设定大小的时候,就会施行数据淘汰策略。

  • noeviction:达到内存限制时不保存新的值(不做任何干扰操作,直接返回OOM异常)

  • allkeys-lru:挑选最近最少使用的数据淘汰(对所有的数据,采用LRU算法,基于最近访问时间)

  • allkeys-lfu::保存常用的数据,删除最不常用的(采用LFU,基于最近访问次数)

  • volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。(对"过期集合"中的数据采取LRU(近期最少使用)算法。如果对key使用"expire"指令指定了过期时间,那么此key将会被添加到"过期集合"中。将已经过期(LRU)的数据优先移除。如果"过期集合"中全部移除仍不能满足内存需求,将OOM。)

  • allkeys-random:任意选择数据淘汰,给新数据腾出空间(对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止)

  • volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。(对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止。如果如果"过期集合"中全部移除全部移除仍不能满足,将OOM)

  • volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。(对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据。)

如果没有匹配到要驱逐的key了,则volatile-lruvolatile-lfuvolatile-randomvolatile-ttl就跟noeviction一样了。

使用

redis.conf中设置,则是永久生效的。

要在运行的Redis集群中设置,则先登录Redis CLI并输入以下命令:

config set maxmemory 100

上面的命令将在运行时将maxmemory值设置为100mb。接下来,你可以用命令查看maxmemory的当前设置值:

config get maxmemory*

返回如下:

1) "maxmemory-policy"
2) "noeviction"
3) "maxmemory-samples"
4) "5"
5) "maxmemory"
6) "100"

第一个是驱逐策略,它决定了在达到maxmemory之后如何删除数据。

注意:将maxmemory设置为0可以确保没有限制。在64位系统中,是默认值。但在32位系统上,Redis最多会使用3GB。

相关链接

原文:https://redis.io/docs/manual/eviction/

更新于 2022-10-11

查看redis更多相关的文章或提一个关于redis的问题,也可以与我们一起分享文章