このトピックでは、プロキシクエリキャッシュ機能の使用方法について説明します。 Tair (Redis OSS-compatible) はプロキシクエリキャッシュ機能を提供し、多数の読み取り要求を受信するホットキーによって引き起こされるアクセススキューの問題に対処します。 この機能を有効にすると、プロキシノードはホットキーのリクエストとレスポンスデータをキャッシュします。 プロキシノードがキャッシュされたデータの有効期間内に重複要求を受信すると、プロキシノードは、バックエンドデータシャードと対話する必要なしに、キャッシュされた結果をクライアントに直接返す。
前提条件
シナリオ
プロキシクエリキャッシュ機能は、ホットキーによって引き起こされるスキューされた要求に対処または防止するために使用できます。 ホットキーは、多数の読み取り要求を受信するキーである。 ホットキーは、特定のデータシャードのCPU使用率とトラフィック使用率を100% に近いレベルに保つようにします。
プロキシノードにキャッシュされたホットキーのクエリ結果は、キャッシュされたデータの有効期間内に更新されません。 したがって、データが更新されてからキャッシュされたデータが期限切れになるまでの期間に、古いデータを読み取る可能性をビジネスが受け入れることができるようにしてください。 この期間は、プロキシキャッシュの有効期間である。 このトレードオフは、システム性能および安定性の向上のために強い一貫性を犠牲にする。 ビジネスロジックは、データに多少の遅延があっても、コアビジネスプロセスが影響を受けないことを保証するために、この潜在的な短いデータ不整合を処理できる必要があります。
制御ポリシー機能の動作
Tair (Redis OSS-compatible) は、効果的なソートと統計アルゴリズムを使用してホットキーを識別します。 ホットキーは、1秒間に5,000を超えるクエリ (QPS) を受け取るキーです。 プロキシクエリキャッシュ機能を有効にすると、プロキシノードは設定したルールに基づいてホットキーのリクエストとレスポンスデータをキャッシュします。 プロキシノードは、キー全体ではなく、ホットキーの要求および応答データのみをキャッシュします。 プロキシノードがキャッシュされたデータの有効期間内に重複要求を受信した場合、プロキシノードは、バックエンドデータシャードと対話する必要なしに、要求の応答をクライアントに直接返す。 ホットキーのクエリ結果が変更された場合、キャッシュは更新されません。
インスタンス診断機能を使用して、インスタンスがスキューリクエストを受信したかどうかを確認できます。 リアルタイムキー統計機能を使用して、インスタンス上のホットキーに関する統計を照会することもできます。 詳細については、「診断レポートの作成」および「リアルタイムキー統計機能の使用」をご参照ください。
パラメーター設定
この機能を管理するには、次の表に示すインスタンスパラメーターを変更します。 詳細は、「インスタンスパラメーターの設定」をご参照ください。
パラメーター | 説明 |
query_cache_enabled | プロキシクエリのキャッシュ機能を有効にするかどうかを指定します。 有効な値:
重要 次のシナリオでは、プロキシクエリキャッシュ機能を有効にできます。
|
query_cache_mode | プロキシクエリのキャッシュモード。 有効な値:
重要 プロキシノードの場合、スレッドあたりの最大キャッシュ容量は100 MBです。 このパラメーターを1に設定すると、プロキシノードはLRUアルゴリズムに基づいてデータを削除します。 この場合、キャッシュヒット率が低下し、全体的な性能が損なわれる可能性がある。 |
query_cache_expire | キャッシュされたデータの有効期間。 単位:ミリ秒。 有効な値: 100〜60000。 デフォルト値: 1000 重要
|
コマンド
Tair (Redis OSS-compatible) インスタンスに接続し、次のコマンドを実行してクエリキャッシュの使用状況を確認できます。 詳細については、「redis-cliを使用してApsaraDB For Redisインスタンスに接続する」「」をご参照ください。
QUERYCACHEキー
コマンド構文: QUERYCACHE KEYS
コマンドの説明: このコマンドは、プロキシノードにキャッシュされたすべてのホットキーを照会するために使用されます。 このコマンドは、関連するデータベースの名前やホットキー自体の名前など、各ホットキーに関する情報を返します。
サンプルコマンド:
QUERYCACHE KEYS
サンプル出力:
1) 1) (integer) 0
2) "key:000000000003"
2) 1) (integer) 0
2) "key:000000000001"
3) 1) (integer) 0
2) "key:000000000002"
4) 1) (integer) 0
2) "key:000000000000"
QUERYCACHE INFO
コマンド構文: QUERYCACHE INFO
コマンドの説明: このコマンドは、プロキシクエリキャッシュの動作状態を照会するために使用される。
サンプルコマンド:
QUERYCACHE INFO
サンプル出力:
1) "put_qps:4.00"
2) "get_qps:16570.00"
3) "hit_rate:99.98"
4) "memory_size:180"
5) "query_count:4"
6) "bandwidth_limit_query_cnt:0"
7) "qps_limit_query_cnt:0"
サンプル出力の説明:
put_qps: データノードが1秒あたりにキャッシュにデータを書き込む回数。
get_qps: クライアントが1秒あたりにキャッシュからデータを読み取る回数。
hit_rate: キャッシュヒット率。
memory_size: キャッシュされたデータによって消費されるメモリ。 単位はバイトです。
query_count: キャッシュされたリクエストの数。
bandwidth_limit_query_cnt: 帯域幅制限によりクエリキャッシュへのアクセスが制限された回数。 デフォルトでは、スロットリングは無効になっています。
qps_limit_query_cnt: QPS制限によりクエリキャッシュへのアクセスが制限された回数。 デフォルトでは、スロットリングは無効になっています。
QUERYCACHE INSTALL
コマンド構文: QUERYCACHE INSTALL
。
コマンドの説明: このコマンドは、キャッシュされたすべてのリクエストを照会します。
サンプルコマンド:
QUERYCACHE INSTALL
サンプル出力:
1) 1) (integer) 0
2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000000\r\n"
3) (integer) 668
2) 1) (integer) 0
2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000001\r\n"
3) (integer) 668
3) 1) (integer) 0
2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000003\r\n"
3) (integer) 668
4) 1) (integer) 0
2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000002\r\n"
3) (integer) 667
サンプル出力の説明: 各リクエストは、データベース名、Redisシリアル化プロトコル仕様に基づいてフォーマットされた完全なリクエストコンテンツ、およびミリ秒単位の残り時間の3行の情報で構成されます。