Redis中最大内存(maxmemory)的设置

4,002 阅读2分钟

maxmemory配置

当Redis内存超出物理内存的限制时,内存的数据会开始和磁盘产生频繁的交换(swap)。交换会让Redis的性能急剧下降,对于访问量比较大的的Redis来说,存储效率太慢基本上等于不可用。

在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存,Redis 提供了配置参数 maxmemory来限制内存超出期望大小。

maxmemory : 默认为0 不限制

配置
在redis.conf中配置

maxmemory 1024mb

获取maxmemory配置的大小

config get maxmemory

maxmemory-policy配置

当实际内存超出maxmemory时,Redis提供了几种可选的策略(maxmemory-policy)可通过maxmemory-policy在redis.conf中进行配置。

maxmemory-policy allkeys-lru

一共有六种策略

  1. noeviction:不会继续服务写请求( del 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默 认的淘汰策略。

  2. volatile-lru: 尝试淘汰设置了过期时间的 key,最少使用的 key 优先被淘汰。 没有设置过期时间的 key不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。

  3. volatile-ttl:跟上面几乎一样,不过淘汰的策略不是 LRU,而是比较 key 的剩余寿命时的值,ttl越小越优先被淘汰。

  4. volatile-random:跟上面几乎一样,不过淘汰的 key 是过期 key 集合中随机的 key。

  5. allkeys-lru:区别于 volatile-lru,这个策略要淘汰的 key 对象是全体的 key 集 合,而不只是过期的 key 集合。这意味着一些没有设置过期时间的 key 也会被淘汰。

6 . allkeys-random:跟上面几乎一样,不过淘汰的 key 是随机的 key。

参考:
《Redis深度历险》