CentOS Redis内存限制配置完全指南:5种淘汰策略详解 (2026)

Redis 作为高性能的内存数据库,其数据全部存储在内存中,这意味着如果不加以限制,Redis 可能会耗尽服务器全部内存资源,导致系统崩溃或其他服务异常。因此,在生产环境中配置 Redis 内存限制是一项必不可少的运维工作。

本文将详细介绍在 CentOS 系统中如何限制 Redis 的内存使用,包括配置方法、淘汰策略的选择建议以及实际操作中的注意事项。

>一、查看当前 Redis 内存使用情况

在修改配置之前,建议先了解 Redis 当前的内存使用状态。连接 Redis 后执行以下命令:

>redis-cli info memory


重点关注以下几个指标:

    >

  • used_memory:Redis 已使用的内存总量(字节)
  • used_memory_rss:操作系统分配给 Redis 的内存总量
  • maxmemory:当前配置的最大内存限制(0 表示未设置限制)
  • 如果 maxmemory 显示为 0,说明当前没有设置内存上限,需要尽快配置。

    >二、修改 redis.conf 配置文件

    Redis 的内存限制通过配置文件 redis.conf 来设置。在 CentOS 系统中,该文件通常位于以下路径之一:

  • /etc/redis/redis.conf
  • /etc/redis.conf
  • >1. 设置最大内存限制

    使用文本编辑器打开配置文件:

    >sudo vi /etc/redis/redis.conf


    找到 maxmemory 配置项(如果没有则新增),设置为合适的值:

    >maxmemory 2gb


    常用的单位包括:

    | 单位 | 说明 | 示例 |
    |------|------|------|
    | bytes | 字节(默认) | maxmemory 1073741824 |
    | kb | 千字节 | maxmemory 1048576kb |
    | mb | 兆字节 | maxmemory 1024mb |
    | gb | 吉字节 | maxmemory 2gb |

    >2. 如何确定合适的内存大小

    内存限制的设置需要综合考虑以下因素:

  • 服务器总内存:建议 Redis 占用不超过系统总内存的 60%-70%,为操作系统和其他服务预留空间
  • 数据量预估:根据业务数据量和增长趋势进行评估
  • 数据类型:不同数据结构占用的内存差异较大,Hash 和 Set 类型通常比 String 更节省空间
  • 是否开启持久化:开启 RDB 或 AOF 持久化时,fork 子进程会额外消耗内存
  • 例如,一台 8GB 内存的服务器,Redis 建议设置 maxmemory 4gb5gb

    >三、配置内存淘汰策略

    仅设置 maxmemory 还不够,当 Redis 达到内存上限时,必须指定一个淘汰策略来决定如何处理新的写入请求。

    redis.conf 中配置:

    >maxmemory-policy volatile-lru

    四、Redis 提供的 8 种淘汰策略

    Redis 提供了 8 种内存淘汰策略,每种策略适用于不同的业务场景:

    >过期键相关策略

  • volatile-lru:从设置了过期时间的键中,优先淘汰最近最少使用(LRU)的键。这是最常用的策略,适合缓存场景。
  • volatile-lfu:从设置了过期时间的键中,优先淘汰使用频率最低(LFU)的键。适合需要保留热点数据的场景。
  • volatile-random:从设置了过期时间的键中随机淘汰一个。
  • volatile-ttl:从设置了过期时间的键中,优先淘汰 TTL(剩余生存时间)最短的键。
  • >全部键相关策略

  • allkeys-lru:从所有键中优先淘汰最近最少使用的键。当缓存数据和持久化数据共存时不适合使用。
  • allkeys-lfu:从所有键中优先淘汰使用频率最低的键。
  • allkeys-random:从所有键中随机淘汰。
  • >不淘汰策略

  • noeviction:不淘汰任何数据,当内存达到上限时,所有写操作将返回错误。默认策略。

>五、策略选择建议

根据不同的使用场景,推荐以下策略:

>缓存场景

Redis 仅作缓存使用,数据丢失不会造成严重影响,推荐使用 allkeys-lruallkeys-lfu,保证缓存空间得到有效利用。

>混合场景

Redis 同时存储缓存数据和持久化数据,推荐使用 volatile-lru,只淘汰有 TTL 的缓存数据,不影响需要持久化的业务数据。

>数据安全优先

数据完整性比服务可用性更重要时,使用 noeviction,写入失败比数据丢失更容易被发现和处理。

>六、动态修改配置(无需重启)

除了修改配置文件外,还可以通过 redis-cli 动态修改,立即生效而无需重启服务:

>redis-cli config set maxmemory 2gb
redis-cli config set maxmemory-policy volatile-lru


注意:动态修改的配置在 Redis 重启后会丢失。如果需要永久生效,还需要同步修改 redis.conf 文件,或者执行以下命令将当前配置写入文件:

>redis-cli config rewrite

七、使配置生效

修改完配置文件后,重启 Redis 服务使配置生效:

>sudo systemctl restart redis


验证配置是否生效:

>redis-cli config get maxmemory
redis-cli config get maxmemory-policy

八、监控与告警

配置好内存限制后,建议做好监控工作:

1. 定期检查内存使用率:通过 redis-cli info memory 获取数据
2. 设置告警阈值:当内存使用率达到上限的 80% 时触发告警
3. 关注淘汰统计:使用 info stats 查看已淘汰的键数量

>redis-cli info stats | grep evicted_keys


如果 evicted_keys 持续增长,说明内存不足导致频繁淘汰,需要考虑扩容或优化数据结构。

>总结

在 CentOS 上限制 Redis 内存使用的核心步骤为:修改 redis.conf 中的 maxmemory 设置内存上限,配合 maxmemory-policy 选择合适的淘汰策略,然后重启服务使配置生效。合理的内存配置不仅能防止 Redis 占用过多系统资源,还能在内存不足时优雅地处理新请求,保障系统整体稳定性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注