ホームページ  >  記事  >  データベース  >  Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

PHPz
PHPz転載
2023-06-02 13:43:341549ブラウズ

1. はじめに

記事を始める前に、質問させてください: コマンドを使用する場合: expire key Second有効期限が切れたら、キーの有効期限を設定します。時間切れです。このキーに対応する 期限切れデータ は本当にサーバーによってすぐに削除されますか?答えは、すぐには削除されないということです。この答えがわかったら、Redis で期限切れのデータがどのように処理されるかを見てみましょう。

2. Redis のデータ特性

Redis はメモリレベルのデータベースです。すべてのデータはメモリに保存されます。メモリ内のデータは、TTL 命令を通じてステータスを取得できます。 3 つの状態があります:

#命令結果状態XX-1-2

3. 時間依存のデータストレージ構造

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

命令を使用して期限切れデータを設定すると、データに対応するアドレスが期限切れスペースに配置されます。保存方法はハッシュ、保存される値は有効期限です。

4. データ削除戦略

データ削除戦略の目標: メモリ使用量と CPU 使用量のバランスを見つける。どちらかを考慮しないとパフォーマンスが低下します。全体的な Redis のパフォーマンスに影響を与える可能性があります。サーバーのダウンタイムやメモリ リークを引き起こす可能性もあります。

1. スケジュールされた削除

  • タイマーを作成します。キーに有効期限が設定されている場合有効期限に達すると、タイマーが使用されます。サーバー タスクはキーの削除操作を即座に実行します。

  • 利点:メモリを節約し、次の時点で削除します。時間が来たら、不要なメモリ使用量をすぐに解放します

  • 欠点: CPU には大きな負荷がかかっています。この時点で CPU 負荷がどれほど高くても、 CPU が占有されているため、Redis サーバーの応答時間と命令のスループットに影響します

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

2. 遅延削除

  • ##データが有効期限に達した場合、処理は行われません。次回データにアクセスすると、

    expireIfNeeded() 関数が呼び出され、データの有効期限が切れているかどうかが判断されます。期限切れでない場合は、データを返し、有効期限が切れていることを確認して削除し、戻ります。存在しません

  • 利点: CPU パフォーマンスを節約し、削除する必要があるとわかった場合にのみ削除します

  • 欠点: メモリ負荷が非常に高く、データが長時間メモリを占有しているように見えます

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

3. 定期的な削除

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

プロセス分析 :

  • Redis サーバーの起動と初期化時に、構成サーバーの値を読み取ります.hz、デフォルトは 10

  • で、その後は毎秒

    serverCron() メソッドを 10 回実行します。これは、サーバー ## の検出に使用されます。

  • #serverCron()

    メソッドは databasesCron( ) メソッドを呼び出します。このメソッドはデータベースを走査するために使用されます。Redis にはデフォルトで 16 個のデータベースがあります (最初のデータベースから順に)データベース

  • databasesCron()

    メソッド activeExpireCycle() メソッドが再度呼び出され、各 expires[*] が検出されます。 1 つずつ、毎回 250ms/server.hz を実行; 特定の 有効期限が切れます [*]検出中に、W 個のキーが検出のためにランダムに選択されます

  • キーのタイムアウトが検出された場合、キーは削除されます。1 ラウンドで削除されたキーの数 > W25% の場合、プロセスをループします。1 ラウンドで削除されたキーの数が ≤W25% の場合、次の
  • expires[*]

    、0 ~ 15 ループ。 W 値 = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 属性値

  • activeExpireCycle() の実行時間が期限切れになると、次回は current_db から実行が継続されます
  • パラメータcurrent_db は、どの期限切れ[*] activeExpireCycle() が実行に入るかを記録するために使用されます。

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

  • #概要:

    サイクル Redis データベース内のタイムリーなデータを一貫してポーリングし、ランダムな抽出戦略を採用し、期限切れデータの割合を使用して削除の頻度を制御します

  • メモリ負荷はそれほど高くありません。メモリは長時間占有されます コールド データは継続的にクリーンアップされます
  • 5. 削除戦略の比較

# # 時間に依存するデータ
永続的に有効なデータ
は期限切れのデータ、削除されたデータ、または未定義のデータ
通常削除遅延削除定期的な削除

6. エビクションアルゴリズム

1. 概念の紹介

新しいデータが Redis に入るとき、メモリが不足している場合はどうすればよいでしょうか? Redis はデータの保存にメモリを使用するため、各コマンドを実行する前に freeMemoryIfNeeded() を呼び出してメモリが十分であるかどうかを確認します。メモリが新しく追加されたデータの最小ストレージ要件を満たしていない場合、redis は現在の命令用のストレージ領域をクリアするために一部のデータを一時的に削除します。データをクリーニングするための戦略は、エビクション アルゴリズムと呼ばれます。

注: データの削除プロセスは、使用可能な十分なメモリ領域を 100% クリアすることはできません。失敗した場合は、繰り返し実行されます。すべてのデータを試した後、メモリのクリーンアップ要件を満たせない場合は、エラー メッセージが表示されます。

Redis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析

2. 8 つの構成

揮発性データの検出 (server.db[i].expires 期限切れになる可能性のあるデータ セット)

メモリを節約、占有なし 期間に関係なく、高頻度でCPUリソースを占有します 時間をスペースと交換します
深刻なメモリ使用量 実行の遅延、CPU 使用率の高さ スペースを時間と引き換えに
メモリの定期的なランダム クリーニング メモリを維持するために 1 秒あたり一定量の CPU リソースを費やします ランダムかつ集中的なチェック
#volatile-lru削除する最も最近使用されていないデータを選択します##volatile-lfu##volatile-ttl#期限切れになるデータを選択してください##volatile -randomデータベース データ全体を検出します ( )
削除する最も最近使用されていないデータを選択してください
ランダムにデータを選択して削除します
すべてのデータ セットserver.db[i].dict
allkeys-lru

削除する最も最近使用されていないデータを選択します

allkeys-lfuallkeys-random
削除する最も最近使用されていないデータを選択してください
削除するデータを選択してください
データのエビクションを放棄する:
no-enviction

データのエビクションを無効にする (redis4.0 のデフォルト ポリシー)

以上がRedis 削除戦略の 3 つの方法とエビクション アルゴリズムの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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