Redis 中的高内存使用率
Redis 的内存使用率是一个关键的监控指标。实例内存不足可能导致数据库响应变慢,严重时甚至会出现数据写入错误。
配置说明:配置 maxmemory 参数后,Redis 可用的内存限制将与 maxmemory 保持一致。当内存使用达到限制时,Redis 只接受读命令,写命令将返回错误。也可以配置驱逐键,以确保在达到最大内存限制时 Redis 的正常运行。
查看内存使用情况
内存使用情况可以从实例本身或 Pods 进行监控。
-
你可以查看 Redis 的 info 信息,在对应的指标中于 Redis 实例详情 > 监控 中查看内存使用统计。
-
Redis 下每个 Pod 的内存资源使用统计,按 Pod 维度展示,显示 Pod 内每个容器的内存统计。你可以在 Redis 实例详情 > 副本数 > StatefulSet > Pods 中查看 Pod 内存监控。
内存使用分析
在大多数场景下,内存主要被实际数据存储需求所消耗,你可以根据需求考虑扩容实例规格。
在 Redis 内存使用不符合预期的特定场景下,可以利用 Redis 内存模块进行相关分析。
点击 Redis 实例详情 > 终端控制台,连接 Redis 实例,输入 memory stats 命令查看服务器内存使用信息。详情请参考 MEMORY STATS。
通常,Redis 实例的大部分内存被数据集占用,但也存在其他内存开销,如主从复制的积压缓冲区、Redis 进程初始化时消耗的内存,以及维护 Redis 中键值链表所用的内存。
-
如果非数据集部分消耗的内存较少,建议忽略这部分,重点分析数据集内存使用是否符合预期。
-
如果非数据集部分占用大量内存,则需要基于
memory stats命令逐项分析内存消耗的根本原因。
内存策略配置
你也可以通过配置数据驱逐策略或过期策略来处理内存中的数据。
数据驱逐策略
当 Redis 内存不足时,如果配置了相关的数据驱逐策略,会自动驱逐数据,确保 Redis 实例正常运行。你可以通过 Redis 实例详情 > 参数配置 更新 maxmemory-policy 参数。
参数值说明:
过期策略
Redis 提供可配置的过期策略(expire),允许自动过期键。该策略允许用户为键设置过期时间,达到时间后 Redis 会删除该键。此功能对缓存数据尤为有用,可防止缓存数据无限期保留导致内存资源浪费。
内存最佳实践建议
通常,数据集占据 Redis 内存的绝大部分,因此内存优化主要聚焦于这部分。你可以参考以下配置最佳实践:
- 为 Redis 设置合理的最大内存限制(
maxmemory)参数,控制 Redis 实例可使用的最大内存。当 Redis 达到最大内存限制时,会触发各种清理策略,如删除过期键或使用 LFU(最少使用)算法移除较少使用的键。建议 maxmemory 大小不超过实例规格的 80%。 - 谨慎设计 Redis 中的数据结构和键。例如,使用更小的数据类型(如字符串)或采用更紧凑的数据结构(如 Redis 的哈希表数据类型)可以减少内存使用。
- 为键设置合理的过期时间和清理策略。
- 避免创建大键。
最佳实践会因不同应用场景而异,因此你可能需要根据具体的应用背景和需求,定制 Redis 内存使用的最佳实践。