场景
在 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-lru
、volatile-lfu
、volatile-random
和volatile-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。