この記事では、Azure Managed Redis キャッシュの効果的なメモリ管理について説明します。
メモリ使用量の報告方法を理解する
Used Memory メトリックは、すべてのシャードを含む、データベースによって消費されたメモリの合計を報告します。 高可用性が有効になっている場合、このメトリックには、プライマリ シャードとレプリカ シャードの両方で使用されるメモリが含まれます。 つまり、報告される値は実際のデータセットのサイズの約 2 倍 になる可能性があります。
たとえば、高可用性が有効になっているキャッシュに 10 GB のデータを格納する場合、 使用済みメモリ メトリックは約 20 GB を報告します。
Used Memory メトリックには、メモリの断片化は含まれません。 アロケーターのオーバーヘッドにより、サーバー上の実際の物理メモリ消費量が高くなる可能性があります。 各メトリックに含まれる内容の詳細については、 監視データのリファレンスを参照してください。
容量計画のためのメモリの見積もり
必要なメモリを計画するときは、値の生のサイズ以外の次の要因を考慮してください。
- キーごとのオーバーヘッド: Redis に格納されている各キーには、内部メタデータ (ポインター、型情報、有効期限の追跡) が含まれます。 このオーバーヘッドは、通常、キー名の長さと値の種類に応じて、キーあたり 50 ~ 100 バイトです。 多数の小さなキーの場合、このオーバーヘッドは大きくなる可能性があります。
- キー名: キー名を格納するために使用されるメモリは、大規模な場合に増加します。 キー名を短くすると、メモリ使用量を減らすことができます。
- 有効期限の追跡: TTL が設定されたキーは、有効期限の記録に余分なメモリを消費します。
- 高可用性レプリケーション: 高可用性を有効にすると、データセットがレプリケートされます。 使用済みメモリ メトリックにはプライマリ メモリとレプリカ メモリの両方が反映されますが、SKU のメモリ制限は既にこれに対応しています。 レプリケーションに対応するために、より大きな SKU を選択する必要はありません。実際のデータセット サイズに基づいて SKU を選択します。
特定のキーの正確なメモリ コストを確認するには、Redis MEMORY USAGE コマンドを使用します。
MEMORY USAGE <your_key_name>
このコマンドは、すべての内部オーバーヘッドを含め、キーによって消費された合計バイト数を返します。 これを使用して、実際の使用量に対するキーごとのメモリの見積もりを検証します。
立ち退きポリシー
お使いのアプリケーションに適した削除ポリシーを選択します。 Azure Managed Redis の既定のポリシーは volatile-lru です。つまり、EXPIRE などのコマンドで TTL 値が設定されているキーのみが削除の対象となります。 TTL 値を持つキーがない場合、システムはキーを削除しません。 メモリ不足の場合にシステムでキーの削除を許可する場合は、 allkeys-lru ポリシーを検討してください。
キーの有効期限
キーに有効期限値を設定します。 有効期限が切れると、メモリ負荷が発生するまで待たずに、事前にキーが削除されます。 メモリ圧迫によって追い出しが発生すると、より多くの負荷がサーバーにかかる可能性があります。 詳細については、EXPIRE コマンドと EXPIREAT コマンドに関するドキュメントを参照してください。
メモリ使用量の監視
そのままの使用済みメモリではなく、使用済みメモリの割合メトリックを監視することをお勧めします。 この割合メトリックは、高可用性レプリケーションを含む SKU の合計メモリ制限を既に考慮しているため、レプリカ メモリを精神的に調整する必要なく、容量にどの程度近いかを簡単に把握できます。
使用済みメモリの割合にアラートを追加して、メモリ不足が発生しないようにし、問題が発生する前にキャッシュをスケーリングする機会を確保します。 使用済みメモリの割合が一貫して 75%を超える場合は、上位レベルにスケーリングしてメモリを増やすことを検討してください。 階層の詳細については、「 アーキテクチャ」を参照してください。