Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍如何诊断 Azure 托管 Redis 中可能发生的实际或感知数据丢失。
注释
本指南中的一些故障排除步骤包括有关运行 Redis 命令和监视性能指标的说明。 有关详细信息,请参阅 相关内容中的文章。
密钥部分丢失
将密钥存储在内存中后,Azure 托管 Redis 不会随机删除密钥。 它因过期策略、逐出策略或显式密钥删除命令而删除密钥。 使用 CLI 运行这些命令。 写入 Azure 托管 Redis 实例中主节点的密钥可能无法立即在副本上使用。 数据以异步和非阻塞方式从主节点复制到副本。
如果密钥从缓存中消失,请检查以下可能的原因:
原因 | DESCRIPTION |
---|---|
密钥过期 | 由于设置了超时,因此会删除密钥。 |
密钥清除 | 内存不足时会删除键。 |
删除密钥 | 客户端通过运行显式删除命令删除密钥。 |
异步复制 | 由于数据复制延迟,密钥在副本上不可用。 |
密钥到期时间
当密钥的超时通过时,Azure 托管 Redis 会自动删除密钥。 有关 Redis 密钥过期的详细信息,请参阅 EXPIRE 命令文档。 还可以使用 SET、 SETEX、 GETSET 和其他 *STORE 命令设置超时值。
若要查看密钥过期次数,请使用 INFO 命令。
Stats
部分显示已过期密钥的总数。 本 Keyspace
部分提供有关涉及超时的密钥的数量和平均超时值的更多信息。
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
检查缓存的诊断指标,查看密钥丢失时间与逐出密钥峰值之间是否存在关联。
密钥逐出
Azure 托管 Redis 需要内存空间来存储数据。 它会删除键以在需要时释放内存。 如果 INFO 命令中的 used_memory 或 used_memory_rss 值即将达到配置的 maxmemory 设置,Azure 托管 Redis 将会根据缓存策略从内存中开始逐出密钥。
使用 INFO 命令监视逐出密钥的数量:
# Stats
evicted_keys:13224
密钥删除
Redis 客户端运行 DEL 或 HDEL 命令,从 Azure 托管 Redis 中删除密钥。 使用 INFO 命令跟踪删除作的数量。 如果 DEL 或 HDEL 命令已运行,则会在 Commandstats
部分中列出它们。
# Commandstats
cmdstat_del:calls=2,usec=90,usec_per_call=45.00
cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00
异步复制
在 Azure 托管 Redis 中启用高可用性时,该服务将创建一个主节点和至少一个副本。 系统使用后台进程以异步方式将数据从主副本复制到副本。 有关更多详细信息,请参阅 Redis 复制文档 。
由于复制不是即时的,因此,如果客户端频繁写入 Redis,则可能会遇到部分数据丢失。 例如,如果主节点在客户端写入密钥后失败,但在后台进程复制密钥之前,当副本变为新主节点时,密钥将丢失。
密钥严重丢失或完全丢失
如果缓存中大多数或所有密钥都消失,请检查以下可能的原因:
原因 | DESCRIPTION |
---|---|
密钥清除 | 有人手动清除了密钥。 |
Redis 实例故障 | Redis 服务器不可用。 |
密钥刷新
客户端可以调用 FLUSHDB 或 FLUSHALL 命令,以从 Redis 实例中删除所有密钥。 若要检查密钥是否已刷新,请使用 INFO 命令。 此 Commandstats
部分显示任一 FLUSH
命令是否运行:
# Commandstats
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00
cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
Redis 实例故障
Redis 是内存中数据存储。 数据保留在托管 Redis 缓存的物理或虚拟机(VM)上。 默认情况下,Azure 托管 Redis 缓存通过提供区域复原缓存来提供对数据丢失的高复原能力。 当此缓存中的主分片失败时,副本分片会自动接管来提供数据。 这些 VM 位于单独的域中进行故障和更新,从而最大程度地减少两个 VM 同时变得不可用的可能性。 如果发生重大数据中心中断,虚拟机可能会一起宕机。 在这些极少数情况下,会丢失数据。
使用 Redis 数据持久性 和 异地复制 更好地保护数据免受这些基础结构故障的影响。