Redis的内存使用率是一个关键的监控指标。实例内部存储的内存不足可能导致数据库响应缓慢,并且很可能导致数据写入错误。
配置描述:在配置maxmemory参数后,Redis的可用内存限制将与maxmemory保持一致。当内存使用达到限制时,Redis仅接受读取命令,写入命令将返回错误。也可以配置自动驱逐键,以确保在达到最大内存限制时,Redis能够正常运行。
内存使用情况可以从实例本身或Pods进行监控。
可以在Redis实例详情 > 监控部分查看相关指标的内存使用统计信息。
| 指标名称 | 说明 |
|---|---|
| MemoryUsed | Redis分配器分配的总内存。 |
| MemFragmentationRatio | 片段化比率,即used_memory_rss与used_memory的比率。 |
| MemoryUsed,Peak | Redis的峰值内存消耗。 |
| MemoryMax | 配置中设置的可用最大内存值。 |
每个Redis下Pods的内存资源使用统计信息,按Pod单独显示,将显示Pod内每个容器的内存统计信息。您可以在Redis实例详情 > 副本数 > StatefulSet > Pods下找到Pod内存监控。
| 指标名称 | 说明 |
|---|---|
| Memory Usage Rate | 每个Pod的内存使用率。 |
在大多数情况下,内存主要由实际数据存储需求消耗,您可以根据需要考虑扩展实例规格。
在Redis内存使用不符合预期的特定情况下,可以利用Redis的内存模块进行相关分析。
点击Redis实例详情 > 终端控制台,连接到Redis实例,输入memory stats命令以查看服务器内存使用情况的信息。有关详细信息,请参见MEMORY STATS。
通常,Redis实例的大多数内存消耗于数据集,但也有其他内存开销,例如用于主从复制的后备缓冲区、Redis进程初始化期间消耗的内存以及用于维护Redis中键值链表的内存。
如果非数据集元素消耗的内存很少,建议忽略这一部分,专注于分析数据集内存使用是否符合预期。
如果非数据集元素占用了大量内存,您需要根据memory stats命令逐项分析内存消耗的根本原因。
您还可以通过配置数据驱逐策略或过期策略来处理内存中的数据。
当Redis的内存不足时,如果您已配置相关的数据驱逐策略,将自动驱逐数据,以确保Redis实例能够正常运行。您可以通过Redis实例详情 > 参数配置更新maxmemory-policy参数。
参数值描述:
| 参数值 | 描述 |
|---|---|
| volatile-lru | 驱逐具有过期时间的 least recently used 数据(包括键值和哈希中的字段)。 |
| volatile-lfu | 驱逐具有过期时间的 least frequently used 数据(包括键值和哈希中的字段)。 |
| volatile-ttl | 仅根据TTL升序驱逐具有过期时间的数据。 |
| volatile-random | 随机选择具有过期时间的数据进行驱逐。 |
| allkeys-lru | 从所有数据集中驱逐 least recently used 数据(包括键值、哈希、列表、集合和有序集)。 |
| allkeys-lfu | 从所有数据集中驱逐 least frequently used 数据(包括键值、哈希、列表、集合和有序集)。 |
| allkeys-random | 随机选择所有数据集中数据进行驱逐(包括键值、哈希、列表、集合和有序集)。 |
| noeviction | 不驱逐数据;当内存空间不足时直接返回写操作错误。 |
Redis提供了一种可配置的过期策略,被称为“过期”策略,允许键的自动过期。该策略使用户能够为键设置过期时间,当达到该时间时,Redis将删除该键。此功能对于缓存数据尤其有用,可以防止因无限期保留缓存数据而浪费内存资源。
通常,数据集占据Redis内存的大部分,因此内存优化主要集中在这一部分。您可以参考以下配置的最佳实践:
maxmemory)参数,控制Redis实例可以使用的最大内存量。当Redis达到最大内存限制时,它将触发各种清理策略,例如删除过期的键或使用LFU(least frequently used)算法来移除使用较少的键。建议maxmemory的大小应小于或等于实例规格的80%。最佳实践可能会因不同的应用场景而有所不同。因此,根据您的具体应用上下文和需求,您可能需要自定义Redis内存使用的最佳实践。