すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):ラージキーとホットキー

最終更新日:Nov 09, 2025

ラージキーとホットキーは、サービスのパフォーマンスを低下させ、リクエストのタイムアウトを引き起こし、さらにはシステムの障害につながる可能性があります。このトピックでは、ラージキーとホットキーを迅速に特定して最適化する方法について説明します。また、その原因と影響を分析し、ビジネスへの影響を軽減するための予防策も提供します。

ステップ 1: ラージキーとホットキーを迅速に特定する

Alibaba Cloud コンソールツール

Tair と Redis は、コンソールでトップキー統計とオフラインフルキー分析機能を提供し、ラージキーとホットキーを迅速に特定するのに役立ちます。

メソッド

制限

説明

手順

トップキー統計 (推奨)

この機能は、Redis Community Edition 5.0 以降、および Tair (Enterprise Edition) のメモリ最適化インスタンスと永続メモリインスタンスでのみサポートされます。

  • 各シャードの各データ構造について、上位 3 つのラージキーとホットキーに関するリアルタイム情報を表示します。

  • 過去 4 日間のラージキーとホットキーの履歴情報を表示できます。

  1. コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。次に、インスタンスを見つけてインスタンス ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[CloudDBA] > トップキー統計 または [オフラインフルキー分析] をクリックします。

オフラインフルキー分析

この機能は、ディスクベースのインスタンスではサポートされていません。

  • RDB バックアップファイルのカスタム分析を実行して、メモリ使用量、分布、キーの有効期限などの情報を取得します。

  • 分析はリアルタイムではなく、大きな RDB ファイルの場合は時間がかかることがあります。

  • ホットキー情報は分析できません。

インスタンスがこれらの機能をサポートしていない場合は、次の方法を使用できます。

ラージキーとホットキーを特定するその他の方法

メソッド

長所と短所

説明

redis-cli の bigkeysmemkeyshotkeys パラメーターを使用する

  • 長所: 便利、高速、安全。

  • 短所: 分析結果はカスタマイズできず、精度や適時性が低い場合があります。このメソッドはインスタンス内のすべてのキーを走査するため、パフォーマンスに影響を与える可能性があります。

redis-cli の bigkeysmemkeyshotkeys パラメーターは、全体的なキー統計と、各データ構造の上位のラージキーまたはホットキーを取得します。

違いは次のとおりです:

  • bigkeys: ラージキーの統計。コレクションまたはリストの場合、要素の数を返します。

  • memkeys: ラージキーの統計。キー値が占有するメモリサイズを返します。

  • hotkeys: ホットキーの統計。

サポートされているデータ構造: STRING、LIST、HASH、SET、ZSET、STREAM。

たとえば、bigkeys のコマンドは redis-cli -h r-***************.redis.rds.aliyuncs.com -a <password> --bigkeys です。

組み込みコマンドを使用してターゲットキーを分析する

  • 長所: オンラインサービスへの影響が最小限。

  • 短所: 返されるキーのシリアル化された長さは、メモリ内の実際の長さと同じではありません。したがって、結果は正確ではなく、リファレンスとしてのみ使用する必要があります。

異なるデータ構造のキーについては、次の低リスクのコマンドを使用して、それらがラージキーであるかどうかを判断できます。

  • STRING 型: STRLEN コマンドは、対応するキーの値のバイト数を返します。

  • LIST 型: LLEN コマンドは、対応するキーのリストの長さを返します。

  • HASH 型: HLEN コマンドは、対応するキーのメンバー数を返します。

  • SET 型: SCARD コマンドは、対応するキーのメンバー数を返します。

  • ZSET 型: ZCARD コマンドは、対応するキーのメンバー数を返します。

  • STREAM 型: XLEN コマンドは、対応するキーのメンバー数を返します。

説明

DEBUG OBJECT および MEMORY USAGE コマンドはリソースを大量に消費し、時間計算量は O(N) です。これらはインスタンスをブロックする可能性があり、推奨されません。

ビジネスレイヤーでホットキーを特定する

  • 長所: ホットキーを正確かつ迅速に特定します。

  • 短所: ビジネスコードの複雑さが増し、パフォーマンスがわずかに低下する可能性があります。

ビジネスレイヤーにコードを追加して、インスタンスアクセスを記録し、非同期分析を実行できます。

redis-rdb-tools ツールを使用してラージキーのカスタム分析を行う

  • 長所: オンラインサービスに影響を与えることなく、カスタム分析をサポートします。

  • 短所: 分析はリアルタイムではなく、大きな RDB ファイルの場合は時間がかかることがあります。

Redis-rdb-tools は Python で書かれたオープンソースツールで、RDB スナップショットファイルのカスタム分析をサポートします。RDB ファイルをダウンロードした後、インスタンス内のすべてのキーのメモリ使用量を分析し、必要に応じて柔軟なクエリを実行できます。

MONITOR コマンドを使用してホットキーを検索する

  • 長所: 便利で安全。

  • 短所: CPU、メモリ、ネットワークリソースを消費します。結果はタイムリーまたは正確ではない場合があります。

MONITOR コマンドは、時間、クライアント情報、コマンド、キー情報など、インスタンスに送信されたすべてのリクエストを出力します。

緊急時には、MONITOR コマンドを短時間実行し、出力をファイルに保存できます。MONITOR コマンドを停止した後、ファイル内のリクエストを分析して、その期間中のホットキーを特定できます。

説明

MONITOR コマンドはインスタンスのパフォーマンスを大幅に低下させる可能性があるため、特別な状況を除き、MONITOR コマンドを使用しないでください。

ステップ 2: ラージキーとホットキーを最適化する

ラージキー

ソリューション

シナリオ

推奨される操作

期限切れデータのクリーンアップ

HASH 内の未クリーンアップの増分データなど、大量の期限切れデータが蓄積されている。

HSCAN コマンドと HDEL コマンドを使用して、無効なデータをクリーンアップできます。これにより、一度に大量のデータをクリーンアップするときに発生する可能性のあるインスタンスのブロックを防ぎます。

ラージキーの圧縮

ログや構成など、JSON や XML テキストデータなどの圧縮可能なデータ。

  • GZIP や Snappy など、シリアル化中に圧縮を有効にできます。

  • Protocol Buffers などのバイナリシリアル化プロトコルを使用できます。

説明

圧縮および展開操作は追加の CPU リソースを消費し、処理パフォーマンスに影響を与える可能性があります。

ラージキーの分割

リーダーボードなど、頻繁にアクセスされる HASH、ZSET、およびその他のデータ構造。

  • ユーザー ID や時間範囲など、ビジネスロジックに基づいてキーを分割できます。

  • user:1001:shard1 や user:1001:shard2 など、シャーディングキー設計を使用できます。

ラージキーを分割すると、データスキューを効果的に防ぐことができます。

ラージキーのオフロード

String 型の大きなファイルまたはバイナリラージオブジェクト (BLOB)。

OSS などの他のストレージシステムに不適切なデータを保存し、インスタンスから削除できます。

  • Redis Community Edition 4.0 以降の場合: UNLINK コマンドを使用して、ラージキーまたは特大キーを安全に削除できます。このコマンドは、メインスレッドのブロックを回避するために、非同期でキーをクリーンアップします。

  • Redis Community Edition 4.0 より前のバージョンの場合: SCAN コマンドを使用して、バッチでデータを走査および削除できます。これにより、一度に多くのキーを削除することによって引き起こされる可能性のあるメインスレッドのブロックを回避できます。

ホットキー

ソリューション

シナリオ

推奨される操作

クラスタアーキテクチャでホットキーをレプリケートする

ホットキーは単一のシャードに全体として保存され、部分的なデータを移行してもリクエストを分散できません。

ホットキーをコピーし、レプリカを他のデータシャードに移行します。たとえば、`foo` という名前のホットキーをコピーして、`foo2`、`foo3`、`foo4` という名前の 3 つの同一のキーを作成します。これらの 3 つのキーを他のデータシャードに移行して、ホットキーを持つ単一のデータシャードへの圧力を軽減します。

説明

このソリューションの欠点は、複数のレプリカを維持するためにコードを変更する必要があり、それらの間のデータ整合性を確保するのが難しいことです。たとえば、更新操作はすべてのレプリカで同期する必要があります。このソリューションは、緊急の問題を軽減するための一時的な措置として使用してください。

読み書き分離を有効にする

読み取りヘビーで書き込みライトなワークロード

この機能を有効にしても読み取りリクエストの負荷が高い場合は、読み取り専用ノードを追加して負荷をさらに軽減します。

説明

リクエスト量が非常に多いシナリオでは、プライマリ/セカンダリ同期には必然的に遅延が発生し、ダーティデータを読み取る可能性があります。したがって、読み取りと書き込みの圧力が高く、厳密なデータ整合性が要求されるシナリオでは、読み書き分離を有効にしないでください。

ステップ 3: ラージキーとホットキーがビジネスに影響を与えるのを防ぐ

ラージキーとホットキーの原因

Tair と Redis では、データ分布の最小単位はキーです。単一のキーは特定のデータシャードに保存され、分割されません。不十分なビジネス計画、無効なデータの蓄積、アクセス量の急増などの要因がすべて、インスタンス内でのラージキーとホットキーの生成につながる可能性があります。例は次のとおりです:

カテゴリ

原因

ラージキー

  • 不適切なシナリオで Tair と Redis を使用すると、キー値が過度に大きくなる可能性があります。たとえば、String 型のキーを使用して大きなバイナリファイルデータを保存する場合などです。

  • ビジネスがオンラインになる前の計画と設計が不十分です。キー内のメンバーが合理的に分割されていないため、一部のキーのメンバー数が過剰になります。

  • 無効なデータを定期的にクリーンアップしないため、HASH 型キーのメンバーが増え続けます。

  • LIST 型キーを使用するビジネスのコンシューマー側でコード障害が発生し、対応するキーのメンバーが増加するだけになります。

ホットキー

  • アクセス量の予期せぬ急増。例としては、突然のヒットプロダクト、トラフィックが急増するホットニュース、ライブチャンネルでのストリーマーのイベントで多くの「いいね」が生成される、またはゲーム内で複数のギルド間の戦闘が特定のエリアで多くのプレイヤーを巻き込む場合などがあります。

ラージキーとホットキーの影響

カテゴリ

影響

ラージキー

  • クライアントでのコマンド実行が遅くなります。

  • インスタンスメモリが maxmemory 制限に達すると、操作がブロックされたり、重要なキーが削除されたり、さらにはメモリ不足 (OOM) エラーが発生したりする可能性があります。

  • クラスタアーキテクチャでは、1 つのデータシャードのメモリ使用量が他のシャードをはるかに超え、シャード間でメモリリソースを均等に使用できなくなります。

  • ラージキーに対して読み取りリクエストを実行すると、インスタンスのネットワーク帯域幅が飽和状態になり、自身のサービスが遅くなったり、関連サービスに影響を与えたりする可能性があります。

  • ラージキーを削除すると、プライマリデータベースが長時間ブロックされやすくなり、同期の中断やプライマリ/セカンダリフェールオーバーがトリガーされる可能性があります。

ホットキー

  • 大量の CPU リソースを消費し、ネットワーク帯域幅の使用量が増加する可能性があり、他のリクエストに影響を与え、全体的なパフォーマンスを低下させます。

  • クラスタアーキテクチャでは、アクセススキューが発生し、1 つのデータシャードへのアクセスが集中し、他のシャードはアイドル状態になります。これにより、そのシャードの接続数制限を使い果たし、新しい接続リクエストを拒否するなどの問題が発生する可能性があります。

  • タイムセールシナリオでは、プロダクトの在庫キーに対するリクエスト量がインスタンスの処理能力を超え、過剰販売につながる可能性があります。

  • ホットキーへのリクエスト圧力がインスタンスの容量を超えると、キャッシュブレークダウンが容易に発生する可能性があります。これは、多くのリクエストがバックエンドストレージレイヤーに送られ、ストレージアクセスが急増したり、さらにはブレークダウンしたりして、他のサービスに影響を与えることを意味します。

予防戦略

戦略

説明

モニタリングとアラートの設定

CPU 使用率、メモリ使用量、接続数などのメトリックに合理的なアラートしきい値を設定します。たとえば、メモリ使用量が 70% を超えたとき、またはメモリが 1 時間で 20% 以上増加したときにアラートを設定します。アラートがトリガーされたら、このトピックのステップ 1 とステップ 2 の指示に従って、ラージキーとホットキーを特定して最適化します。これにより、ビジネスに影響が及ぶ前に問題を解決します。

無効なデータのクリーンアップを回避するために Tair (Enterprise Edition) を使用する

ハッシュ型のラージキーを含むシナリオの場合、Tair (Enterprise Edition) は拡張データ構造である TairHash を提供します。これは、各フィールドの有効期限とバージョンの設定をサポートします。TairHash を正しく使用すると、O&M ワークロードを大幅に削減し、ビジネスコードの複雑さを簡素化し、ラージキーとホットキーによって引き起こされる問題に効果的に対処できます。