Skip to content

内存淘汰策略

最大内存设置

  1. redis 默认内存是多少?

    在 64 位操作系统不限制内存大小,在 32 位操作系统下最多使用 3GB。

  2. 查看 redis 最大内存?

    Plain Text config get maxmemory

  3. 修改 redis 内存大小?

    • 修改配置文件

      redis.conf 第 859 行可以设置最大内存大小(单位是字节)。

      : set nu 可以显示文件行号

    • 使用命令配置

      config set maxmemory 100

  4. redis 内存满了之后会怎样?

    采用内存淘汰策略,默认是 no-enviction,会抛出 OOM 异常。

  5. 查看内存信息

    Plain Text info memory

  6. 生产上一般怎么设置内存?

    推荐设置内存为最大物理内存的四分之三


redis内存淘汰策略

八种内存淘汰策略

在 redis.conf 文件中有体现。

  • 2个范围
    • 所有 key。
    • 设置了过期时间的 key。
  • 4个方式
    • LRU 算法。
    • LFU 算法。
    • random - 随机删除。
    • ttl - 删除马上要过期的。

  1. volatile-lru:对所有设置了过期时间的 key 使用 LRU 算法进行删除。
  2. allkeys-lru:对所有 key 使用 LRU 算法进行删除。
  3. volatile-lfu:对所有设置了过期时间的 key 使用 LFU 算法进行删除。
  4. allkeys-lfu:对所有 key 使用 LFU 算法进行删除。
  5. volatile-random :对所有设置了过期时间的 key 随机删除。
  6. allkeys-random :对所有 key 随机删除。
  7. volatile-ttl:删除马上要过期的 key。
  8. noeviction:默认的内存淘汰策略,禁止删除数据,能保证数据不丢失。当内存满了的时候,再写入数据会返回错误。
  • LRU 算法:最近最久未使用。
  • LFU 算法:最近使用次数最少。

设置内存淘汰策略

  1. 配置文件设置

在 redis.conf 配置文件中 maxmemory-policy 对应设置内存淘汰策略,注释提示了默认淘汰策略是 noeviction。通过修改该配置就可以修改内存淘汰策略。

  1. 命令行设置

    java
    // 获取maxmemory-policy配置127.0.0.1:6379> config get maxmemory-policy
    // 设置maxmemory-policy配置为allkeys-lru127.0.0.1:6379> config set maxmemory-policy allkeys-lru

如何选择内存淘汰策略

  • 若所有数据访问频率一样,可以使用 allkeys-random
  • 若有一部分是热点数据,有一部分是冷门数据,可以考虑使用 allkeys-lru
  • 若希望有一部分数据被长期保存,而有些可以被删除。可以选择 volatile-lruvolatile-random
  • 若希望避免设置 key 的失效时间来减少内存的使用。可以使用 allkeys-lru 搭配 key 不设置过期时间来高效利用内存。

参考链接