共用方式為


針對 Azure 受控 Redis 中的數據遺失進行疑難解答 (預覽)

本文討論如何診斷 Azure 受控 Redis 中可能發生的實際或感知數據遺失(預覽)。

注意

本指南中的數個疑難排解步驟包含如何執行 Redis 命令和監視各種效能度量的指示。 如需詳細資訊和指示,請參閱 其他資訊 一節中的文章。

遺失部分金鑰

Azure 受控 Redis 不會在密鑰儲存在記憶體後隨機刪除。 不過,它確實會移除金鑰以回應到期原則、收回原則,以及明確的金鑰刪除命令。 您可以透過 CLI 執行這些命令。

已寫入 Azure 受控 Redis 實例中主要節點的密鑰可能無法立即在複本上使用。 資料會以非同步和非封鎖的方式,從主要節點複寫到複本。

如果您發現金鑰已從快取中消失,請檢查下列可能的原因:

原因 描述
金鑰到期日 已移除索引鍵,因為它們已設定逾時。
金鑰收回 在記憶體壓力下,會移除金鑰。
金鑰刪除 金鑰會由明確的刪除命令移除。
非同步複寫 因為資料複寫延遲,所以複本上沒有可用的金鑰。

金鑰到期日

如果已指派密鑰逾時且該期間已通過,Azure 受控 Redis 會自動移除密鑰。 如需 Redis 金鑰到期的詳細資訊,請參閱 EXPIRE 命令文件。 您也可以使用 SETSETEXGETSET 和其他 *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_memoryused_memory_rss值接近設定的 maxmemory 設定時,Azure Managed Redis 會根據取原則開始從記憶體收回密鑰。

您可以使用 INFO 命令,監視已收回金鑰的數目:

# Stats

evicted_keys:13224

您也可以查看快取的診斷計量,以查看金鑰遺失的時間和收回金鑰的峰值之間是否有關聯性。 如需使用 keyspace 通知或 MONITOR 來偵錯下列問題,請參閱偵錯 Redis Keyspace 遺漏

金鑰刪除

Redis 用戶端可以發出 DELHDEL 命令,以明確地從 Azure 受控 Redis 移除密鑰。 您可以使用 INFO 命令,追蹤刪除作業的數目。 如果已呼叫 DELHDEL 命令,這些命令會列在 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 伺服器無法使用。

金鑰排清

用戶端可以呼叫 FLUSHDBFLUSHALL 命令,從 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 資料永續性異地複寫,以改善資料保護,避免這些基礎結構失敗。

其他資訊

這些文章提供有關避免資料遺失的詳細資訊: