記憶體管理

收回原則

選擇適用於您應用程式的收回原則。 Azure Cache for Redis 的預設原則是 volatile-lru,這表示只有具有使用 EXPIRE 之類的命令設定的 TTL 值的金鑰,才符合收回的資格。 如果沒有任何金鑰有 TTL 值,則系統不會收回任何金鑰。 如果您想要讓系統允許在記憶體壓力下收回任何金鑰,您可以考量使用 allkeys-lru 原則。

金鑰到期

設定您的金鑰的到期值。 到期會主動移除金鑰,而不是等候出現記憶體壓力。 因記憶體壓力而收回時,可能會導致伺服器上的負載增加。 如需詳細資訊,請參閱 EXPIREEXPIREAT 命令的文件。

最小化記憶體分散

大型值可能會在收回時導致記憶體分散,並可能導致高記憶體使用量和伺服器負載。

監視記憶體使用量

對記憶體使用量新增監視,以確保您不會用盡記憶體,並有機會在看到問題之前調整快取。

設定您的 maxmemory-reserved 設定

設定您的 maxmemory-reserved 設定以改善系統回應性:

  • 對於大量寫入工作負載,或者如果您要將 100 KB 以上的值儲存在快取中,足夠的保留設定特別重要。 依預設,當您建立快取,會為 maxmemory-reserved 保留約 10% 的可用記憶體。 另一個 10% 會保留給 maxfragmentationmemory-reserved。 如果您有大量寫入負載,則可以增加保留的數量。

  • maxmemory-reserved 設定會設定叢集中每個執行個體的記憶體數量 (以 MB 為單位),以保留給非快取作業,例如容錯移轉期間的複寫。 設定此值可讓您在負載變動時具有更一致的 Redis 伺服器體驗。 對於寫入大量資料的工作負載,此值應該設定為更高的值。 當記憶體保留給這類作業時,無法用於儲存快取的資料。 maxmemory-reserved 的允許範圍是 maxmemory 的 10% - 60%。 如果您嘗試將這些值設定為低於 10% 或高於 60%,則會重新評估這些值,並將其設定為最小值 10% 和最大值 60%。 這些值會以 MB 呈現。

  • maxfragmentationmemory-reserved 設定會設定叢集中保留以容納記憶體分散的每個執行個體的記憶體數量 (以 MB 為單位)。 當您設定此值時,如果快取已滿或接近全滿且分散比率很高,則 Redis 伺服器體驗會更一致。 當記憶體保留給這類作業時,無法用於儲存快取的資料。 maxfragmentationmemory-reserved 的允許範圍是 maxmemory 的 10% - 60%。 如果您嘗試將這些值設定為低於 10% 或高於 60%,則會重新評估這些值,並將其設定為最小值 10% 和最大值 60%。 這些值會以 MB 呈現。

  • 選擇新的記憶體保留值 (maxmemory-reservedmaxfragmentationmemory-reserved) 時,需要考慮的一件事是,這項變更對已有大量資料在執行的快取會有怎麼樣的影響。 例如,如果您的快取是 53 GB 而資料為 49 GB,則將保留值變更為 8 GB,會將系統的最大可用記憶體降至 45 GB。 如果目前的 used_memoryused_memory_rss 值高於 45 GB 的新限制,則等 used_memoryused_memory_rss 都低於 45 GB 後,系統必須收回資料。 收回會增加伺服器負載並讓記憶體過於分散。 如需 used_memoryused_memory_rss 等快取計量的詳細資訊,請參閱建立您自己的計量

注意

當您向上或向下調整快取時,maxmemory-reservedmaxfragmentationmemory-reserved 設定都會自動依快取大小的比例調整。 例如,如果在 6 GB 快取上,將 maxmemory-reserved 設定為 3 GB,而您調整為 12 GB 快取,則設定會在調整期間自動更新為 6 GB。 當您向下調整時,則會是對等的情況。 當您以程式設計方式相應增加或減少快取時,使用 PowerShell、CLI 或 Rest API,任何 maxmemory-reservedmaxfragmentationmemory-reserved 都會忽略為更新要求的一部分。 只會接受您的調整變更。 您可以在調整作業完成之後更新這些記憶體設定。

下一步