針對 Azure 受控 Redis 中的數據遺失進行疑難解答 (預覽)
本文討論如何診斷 Azure 受控 Redis 中可能發生的實際或感知數據遺失(預覽)。
注意
本指南中的數個疑難排解步驟包含如何執行 Redis 命令和監視各種效能度量的指示。 如需詳細資訊和指示,請參閱 其他資訊 一節中的文章。
遺失部分金鑰
Azure 受控 Redis 不會在密鑰儲存在記憶體後隨機刪除。 不過,它確實會移除金鑰以回應到期原則、收回原則,以及明確的金鑰刪除命令。 您可以透過 CLI 執行這些命令。
已寫入 Azure 受控 Redis 實例中主要節點的密鑰可能無法立即在複本上使用。 資料會以非同步和非封鎖的方式,從主要節點複寫到複本。
如果您發現金鑰已從快取中消失,請檢查下列可能的原因:
原因 | 描述 |
---|---|
金鑰到期日 | 已移除索引鍵,因為它們已設定逾時。 |
金鑰收回 | 在記憶體壓力下,會移除金鑰。 |
金鑰刪除 | 金鑰會由明確的刪除命令移除。 |
非同步複寫 | 因為資料複寫延遲,所以複本上沒有可用的金鑰。 |
金鑰到期日
如果已指派密鑰逾時且該期間已通過,Azure 受控 Redis 會自動移除密鑰。 如需 Redis 金鑰到期的詳細資訊,請參閱 EXPIRE 命令文件。 您也可以使用 SET、SETEX、GETSET 和其他 *STORE 命令來設定逾時值。
若要取得到期金鑰數量的統計資料,請使用 INFO 命令。 Stats
區段會顯示到期金鑰的總數。 Keyspace
區段提供具有逾時和平均逾時值的金鑰數目相關資訊。
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
您也可以查看快取的診斷計量,以查看金鑰遺失的時間和過期金鑰的峰值之間是否有關聯性。 如需使用 keyspace
通知或 MONITOR
來偵錯這些類型問題的相關資訊,請參閱偵錯 Redis Keyspace 遺漏。
金鑰收回
Azure 受控 Redis 需要記憶體空間才能儲存數據。 它會視需要清除金鑰,以釋出可用的記憶體。 當 INFO 命令中的used_memory或used_memory_rss值接近設定的 maxmemory 設定時,Azure Managed Redis 會根據快取原則開始從記憶體收回密鑰。
您可以使用 INFO 命令,監視已收回金鑰的數目:
# Stats
evicted_keys:13224
您也可以查看快取的診斷計量,以查看金鑰遺失的時間和收回金鑰的峰值之間是否有關聯性。 如需使用 keyspace 通知或 MONITOR 來偵錯下列問題,請參閱偵錯 Redis Keyspace 遺漏。
金鑰刪除
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.io 網站說明 Redis 資料複寫的一般運作方式。 在用戶端經常寫入 Redis 的情況下,可能會發生部分資料遺失,因為複寫不一定是瞬間的。 例如,如果主要節點在用戶端將金鑰寫入其中之後,並在背景流程有機會將該金鑰傳送至複本之前就當機了,則當複本接管新主要節點時,會遺失金鑰。
主要或完全遺失金鑰
如果大部分或所有金鑰已從快取中消失,請檢查以下可能的原因:
原因 | 描述 |
---|---|
金鑰排清 | 已手動清除金鑰。 |
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 快取的實體或虛擬機上。 Azure 受控 Redis 快取預設會提供區域復原快取,以針對數據遺失提供高復原能力。 當這類快取中的主要分區失敗時,複本分區會接管以自動提供數據。 對於故障和更新,這些 VM 位於不同的網域中,以盡量減少兩者同時無法使用的機會。 不過,如果發生主要數據中心中斷,VM 可能仍會一起關閉。 在這些罕見的情況下,您的資料將會遺失。
考慮使用 Redis 資料永續性和異地複寫,以改善資料保護,避免這些基礎結構失敗。
其他資訊
這些文章提供有關避免資料遺失的詳細資訊: