驱逐策略
驱逐策略确定当数据库达到其内存限制时会发生什么。
Redis 企业软件 | 适用于 Kubernetes 的 Redis Enterprise |
---|
驱逐策略确定当数据库达到其内存限制时会发生什么。
为了给新数据腾出空间,将根据所选策略逐出 (删除) 旧数据。
为防止这种情况发生,请确保您的数据库足够大,可以容纳所有所需的键。
驱逐策略 | 描述 |
---|---|
不驱逐 | 达到 内存限制时不保存新值当数据库使用复制时,这适用于主数据库 |
allkeys-LRU | 保留最近使用的键;删除最近最少使用的 (LRU) 键 |
allkeys-lfu | 保留常用的键;删除最不常用 (LFU) 的键 |
allkeys-random | 随机删除键 |
volatile-LRU | 删除最近最少使用的键expire 字段设置为 true |
volatile-lfu | 删除最不常用的键expire 字段设置为 true |
volatile-random | 随机删除键expire 字段设置为 true |
volatile-ttl | 删除最不常用的键expire 字段设置为 true,并且最短剩余生存时间 (TTL) 值 |
驱逐策略默认值
volatile-lru
是大多数数据库的默认逐出策略。
主动-主动数据库的默认策略是无驱逐策略。
主动-主动数据库逐出
主动-主动数据库的驱逐策略机制比独立数据库更早启动,因为它需要传播到所有参与的集群。 当其中一个 Active-Active 实例达到其内存限制的 80% 时,驱逐策略开始驱逐密钥。如果在逐出键时内存使用率继续增加,则逐出速率将增加,以防止达到内存不足状态。 与独立的 Redis Enterprise 数据库一样,主动-主动驱逐是按分片计算的。 为了防止过度驱逐,内部启发式方法可能会在分片达到 80% 内存限制时阻止键被驱逐。在这种情况下,只有当分片内存达到 100% 时,键才会被驱逐。
如果主动-主动实例之间出现网络问题,则只有在所有实例都同步时才能释放内存。如果参与的集群之间没有通信,则可能导致所有键被逐出,并且实例达到 Out-of-Memory 状态。
注意:
具有 Auto Tiering 的主动-主动数据库不支持数据逐出策略。避免数据逐出
为避免数据逐出,请确保您的数据库足够大以容纳所需的值。
对于较大的数据库,请考虑使用 Auto Tiering 。
Auto Tiering 将活跃使用的数据(也称为热数据)存储在 RAM 中,将剩余数据存储在闪存 (SSD) 中。 这使您可以保留更多数据,同时确保以最快的速度访问最关键的数据。