ElastiCache内存容量超出上限时会触发哪些运行机制?
ElastiCache内存占满后的行为说明
首先明确基础前提:你使用的cache.t4g.micro节点配备的0.5GiB存储空间全为RAM,运行时不会自动将业务数据写入HDD/SSD。节点附带的本地磁盘仅用于存储持久化备份文件、服务运行日志、慢查询日志等非实时业务数据,不会作为内存溢出时的承接存储,这和你在官方文档看到的“仅使用RAM存储”的描述一致。
内存写满后的具体行为没有统一答案,完全由集群配置的maxmemory-policy参数决定,你提到的几种可能性都有可能在对应配置下出现:
- 当策略配置为
noeviction(开源Redis原生默认策略):所有会增加内存占用的写操作(包括你调用的StringSetAsync()方法)会直接返回错误,不会删除现有数据,也不会落盘,读请求可正常响应。 - 当策略配置为淘汰类策略时,写请求不会直接报错,服务会按照预设规则自动淘汰键值腾出内存空间,不存在“默认移除最早存入键值对”的逻辑,不同淘汰规则的逻辑如下:
allkeys-lru:从全量键中淘汰最近最少使用的键allkeys-lfu:从全量键中淘汰访问频率最低的键volatile-lru:仅从设置了过期时间的键中淘汰最近最少使用的键,如果没有符合条件的可淘汰键,写请求会返回错误volatile-lfu:仅从设置了过期时间的键中淘汰访问频率最低的键,无符合条件的可淘汰键时写请求报错allkeys-random:从全量键中随机选择键淘汰volatile-random:仅从设置了过期时间的键中随机选择键淘汰,无符合条件的可淘汰键时写请求报错volatile-ttl:从设置了过期时间的键中优先淘汰剩余存活时间最短的键,无符合条件的可淘汰键时写请求报错
补充注意:
cache.t4g.micro的0.5GiB内存并非全量可用于存储业务键值,需要预留一部分给Redis服务本身的运行开销、主从复制缓冲区、客户端输出缓冲区,实际业务可用内存会略低于0.5GiB,建议提前配置内存使用率告警,避免影响业务读写。你可以直接在ElastiCache控制台的参数组配置页查看当前集群绑定的maxmemory-policy参数值,确认实际的满容行为。
内容的提问来源于stack exchange,提问作者sashoalm
相关产品推荐
相关产品推荐

