ホームページ >データベース >Redis >Redis でホット データとコールド データの識別と交換を実現する方法

Redis でホット データとコールド データの識別と交換を実現する方法

WBOY
WBOY転載
2023-05-26 17:23:03864ブラウズ

背景

Redis ハイブリッド ストレージ製品は、Alibaba Cloud が独自に開発したハイブリッド ストレージ製品であり、Redis プロトコルおよび機能と完全な互換性があります。

コールド データの一部をディスクに保存することで、ほとんどのアクセス パフォーマンスが低下しないようにしながら、ユーザー コストが大幅に削減され、Redis 単一インスタンスのデータ量のメモリ制限を超えます。

その中でも、ホット データとコールド データの識別と交換は、ハイブリッド ストレージ製品のパフォーマンスの重要な要素です。

ホット データとコールド データの定義

Redis ハイブリッド ストレージでは、ディスクに対するメモリの比率はユーザーが自由に選択できます:

Redis でホット データとコールド データの識別と交換を実現する方法

# #Redis ハイブリッド ストレージ インスタンスは、すべてのキーをホット データと見なし、少量のメモリを犠牲にしてすべてのキー アクセス リクエストのパフォーマンスが効率的かつ一貫していることを保証します。値の部分については、メモリが不足している場合、インスタンス自体が最近のアクセス時間、アクセス頻度、値のサイズ、その他の次元に基づいて値の一部をコールド データとして選択し、メモリが不足するまでバックグラウンドで非同期にディスクに保存します。指定されたしきい値未満です。

Redis ハイブリッド ストレージ インスタンスでは、次の 2 つの考慮事項のために、すべてのキーをホット データとみなし、メモリに保存します。

  1. キー アクセス頻度は、価値。

  2. KV データベースとして、通常のアクセス要求では、まずキーを検索して、キーが存在するかどうかを確認する必要があります。キーが存在しないことを確認するには、次のセットを確認する必要があります。すべてのキーを何らかの形式で。メモリ内データ構造のすべてのキー値を保持すると、検索速度が純粋なメモリ データ構造の場合とまったく同じであることが保証されます。

  3. キーのサイズ比率は非常に低いです。

  4. 一般的なビジネスモデルでは、通常の文字列型であっても、そのValueはKeyの数倍となるのが一般的です。 Set、List、Hash などのコレクション オブジェクトの場合、すべてのメンバーを合計して構成される値はキーよりも数桁大きくなります。

したがって、Redis ハイブリッド ストレージ インスタンスには 2 つの主な適用可能なシナリオがあります。

  1. 不均一なデータ アクセスとホットスポット データの存在。

  2. メモリがすべてのデータを保存するには十分ではなく、値が大きい (キーに比べて)

ホット データとコールド データの識別

メモリが不足している場合、インスタンスは最近のアクセス時間、アクセス頻度、値のサイズ、その他の次元に基づいて値の重みを計算し、最も重みの低い値をディスクに保存し、ディスクから削除します。想い出。

疑似コードは次のとおりです。

Redis でホット データとコールド データの識別と交換を実現する方法

最も理想的な状況では、現在の最低値を正確に計算できるようにしたいと考えています。ただし、値のホットとコールドの度合いはアクセス状況に応じて動的に変化し、毎回すべての値のホットとコールドの重みを再計算する時間の消費はまったく許容できません。

メモリがいっぱいになると、Redis 自体がユーザーが設定した削除戦略に従ってデータを削除します。また、ホット データをメモリからディスクに書き込むことも「削除」プロセスと見なすことができます。パフォーマンス、精度、ユーザーの理解度を考慮し、ホットデータとコールドデータを識別する際には Redis と同様の近似計算方法を使用し、データの一部をランダムにサンプリングし、エビクションによるサンプリングを活用することで、複数の戦略をサポートし、CPU とメモリの消費量を削減します。精度の向上に役立つ履歴情報。

Redis の近似除去アルゴリズムのヒット率の概略図を、さまざまなバージョンとさまざまな数のサンプリング サンプルの構成で示します。削除されたデータ ポイントは明るい灰色、削除されなかったデータ ポイントは灰色、テスト中に追加されたデータ ポイントは緑色で表示されます。

コールド データとホット データの交換

Redis 混合ストレージのホット データとコールド データ交換プロセスは、バックグラウンド IO スレッドで完了します。

ホット データ ->コールド データ

非同期メソッド:

  1. メインスレッドはメモリが近くなったときにデータを生成します一連のデータ交換タスク;

  2. バックグラウンド スレッドはこれらのデータ交換タスクを実行し、完了後にメイン スレッドに通知します;

  3. メイン スレッドの更新 メモリ内の値を解放し、メモリ内のデータ ディクショナリの値を単純なメタ情報に更新します;

  4. 同期方法:

書き込み時 受信トラフィックが大きすぎる場合、非同期メソッドではデータを時間内にスワップアウトできず、メモリが最大仕様を超える可能性があります。メインスレッドは、電流制限の目的を偽装して達成するために、データ交換タスクを直接実行します。

コールド データ -> ホット データ

非同期メソッド:

  1. メインスレッドは、コマンドを実行する前にまずコマンドを判断します。関係するすべての値がメモリ内にあるかどうか;

  2. そうでない場合は、データ読み込みタスクを生成し、クライアントを一時停止し、メインスレッドは他のクライアント要求の処理を続行します。

  3. バックグラウンド スレッドはデータ読み込みタスクを実行し、完了後にメイン スレッドに通知します。
  4. メイン スレッドはメモリ内のデータ ディクショナリの値を更新し、以前に一時停止されたクライアントをウェイクアップし、そのリクエストを処理します。
  5. 同期方法:
  6. Lua スクリプトでは、特定のコマンドの実行フェーズ中に、値がディスクに保存されていることが判明した場合、 、メインスレッドがそれを直接実行します。データ読み込みタスクにより、Lua スクリプトとコマンドのセマンティクスが変更されないことが保証されます。

以上がRedis でホット データとコールド データの識別と交換を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。