ホームページ  >  記事  >  データベース  >  Redis の削除ポリシーとエビクション ポリシー

Redis の削除ポリシーとエビクション ポリシー

咔咔
咔咔オリジナル
2020-08-28 17:19:321477ブラウズ

この記事の知識ポイント 期限切れデータの概念 データ削除ポリシー 立ち退きアルゴリズム

序文

##Kaka はインタビュー ガイドを作成するためのロードマップを作成し、そのロードマップに基づいて記事を書く準備をしましたが、後になって、補足されていない知識ポイントを追加していることに気づきました。また、パートナーの皆様にも情報の追加にご協力いただけることを楽しみにしております。コメントセクションでお会いしましょう!

##❞

Redis の削除ポリシーとエビクション ポリシー#ここに画像の説明を挿入

期限切れのデータ まず、3 つの主要な値、つまり性別、名前、年齢を見てみましょう。

これら 3 つの値を設定する手順は、set name kaka setex age 100 24 setex sex 10 1

Redis の削除ポリシーとエビクション ポリシーRedis では、ttl を使用して特定のキーを取得できます。ステータス、ttl を使用して、名前、年齢、性別のステータスをそれぞれ取得しましょう。

3 つの値が表示されます。-1 775 -2

Soこれら 3 つの値によって得られる情報とは何でしょうか。

  • -1 は永続的に有効なデータを表します
  • 775 この値は年齢に設定され、使用されるコマンドは setex age 1000 24残りの有効期限として表されます
  • ##-2 は、期限切れのデータ、削除されたデータ、または定義のないデータを示します
    Redis の削除ポリシーとエビクション ポリシー

期限切れデータのストレージ構造

    時間依存型を設定した場合 名前を指定すると、redis が保存しますメモリアドレス 0x10101
  • その後、redis は時間依存のキーを保存するために別のスペースを開きます
  • ただし、保存方法はメモリですキーに対応するアドレスと有効期限
  • 今日私たちが話している Redis 削除戦略は、削除されたデータです。
    Redis の削除ポリシーとエビクション ポリシー

時限削除とは、タイマーを作成し、それを次のように使用することです。キー 時間が経過すると、タイマー タスクは期限切れのキーをすぐに削除します。

利点: キーは期限切れになると削除されると考えられます。間違いなく最もメモリに優しく、メモリを節約します

欠点: redis のシングルスレッド機能は、すべてのコマンドが特定の順序で実行されることです。有効期限が切れたときにキー値を削除すると、CPU への負担が大きくなり、Redis サーバーの応答時間と IO に直接影響します

スケジュールされた削除は、スペースと引き換えに時間を使用することを意味します

スケジュールされた削除が完了すると、キー値に対応するデータが削除され、有効期限が切れたメモリ領域も直接削除されます。 Redis の削除ポリシーとエビクション ポリシー

遅延削除

この図を見ると、キー値の有効期限が切れても、削除されません。直接削除されます。いつ削除されますか?続きを読むRedis の削除ポリシーとエビクション ポリシー

遅延削除を使用すると、データの有効期限が切れても自動的に削除されず、次回キー値を取得したときに判断して削除する方法となります。キーの有効期限が切れているため、有効期限が切れた場合は削除します。

つまり、再度 get name を実行すると、関数が実行されます。 expirelfNeeded() この関数は、キーの有効期限が切れているかどうかを判断する関数です。有効期限が切れたら nil を返し、メモリから削除します。

Redis の削除ポリシーとエビクション ポリシー利点: CPU パフォーマンスが一定量低下し、削除する必要がある場合にのみ削除されます

欠点:確かにその通りです ホットニュースなどメモリプレッシャーが高いです ホットスポットを過ぎるとほとんど誰もアクセスしなくなります 誰もアクセスしなければキーは常に存在し、一定量を占有しますつまり、この方法は、空間を時間と交換するというものです。

上記では 2 つの削除方法について説明しました。1 つはスケジュールされた削除で、もう 1 つは遅延削除です。 1つは、空間と時間を交換することです。 1つは、時間をスペースと引き換えにすることです。どちらのオプションも比較的極端なアプローチです。次に、定期削除の実施計画を見てみましょう。

まず、redis のストレージ容量を見てみましょう。デフォルトでは 16 個あります。redis.conf には、このパラメータによって制御される構成パラメータ データベースがあります。各データベースには独自の有効期限パーティションがあり、データ アドレスとデータ有効期限時刻が保存されます。

Redis の削除ポリシーとエビクション ポリシー実装方法

redis が起動すると、サーバーの hz 値が読み取られます。デフォルトは 10 です。この値は、info server

Redis の削除ポリシーとエビクション ポリシー を使用して端末上で直接表示でき、その後、サーバーは、serverCron() ポーリングのために 1 秒あたり Hz 回実行されます。引き続き、databasesCron を使用して、16 個の Redis ライブラリの情報に 1 つずつアクセスします。

アクセス時に、activeExpireCycel が実行され、各有効期限[*]を 1 つずつ検出します。各実行時間は 250ms/サーバーです。 hz パラメータ

expirs[*] を 1 つずつ検出すると、ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC がランダムに選択されて検出されます

##キーがタイムアウトした場合は、キーを直接削除します
  • 1 ラウンドで削除されたキーの数>ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC*25% がプロセスを循環し続ける
  • 1 ラウンドで削除されたキーの数 25%、次の期限切れを確認してください[
  • ]
    ここで問題が発生します。250ms/hz の時間が実行されましたが、16 個のデータベースの期限が切れています。循環されていません。その方法を説明します。次回はどの図書館に行ってみようかな?実際、この値は存在しており、current_db の値です。この値は、次回expires[*]を入力して実行したときにactiveExpireCycelに記録されます
  • 特徴1: CPU使用率に高いピーク値がなく、検出頻度をカスタマイズ可能メモリは継続的にクリーンアップされます

Redis の削除ポリシーとエビクション ポリシー

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

上記では 3 つの削除戦略について説明しましたが、これら 3 つの戦略は次のキーに対してのみ有効です。有効期間が設定されています。

Redis が使用するメモリが不十分なため、エビクション ポリシーを使用して Redis が通常どおり使用できるようにします。

Redis は、各コマンドが実行される前に freeMemorylfNeeded() を呼び出してメモリが十分であるかどうかを確認します。メモリが不足している場合は、いくつかのキーがクリアされます。このデータ消去戦略はエビクション戦略と呼ばれます。

redis の最大使用可能メモリのパラメータは: maxmemory です。デフォルトは 0 です。これは占有される物理メモリの割合を指します。通常は 50% に設定するだけで十分です。

毎回削除するキーの数を選択します: maxmemory-samples

削除ポリシー: maxmemory-policy

「削除戦略に焦点を当てましょう」

  • 紛失したデータの検出が簡単 (つまり、有効期間を設定しましたが、データの有効期限がまだ切れていないため、上記の期限切れ[*]です)
    • 揮発性-lru: 最近ほとんど使用されていないデータを選択します
    • volatile-lfu: 最も最近使用されていないデータを選択
    • ##volatile -ttl: 削除するデータを選択します
    • volatile-random: ランダムに選択します
  • #見た目次の写真で

  • 9s 現在の時刻です

  • 最長のキーは9秒です離れているのは年齢です

  • 使用頻度が最も低いキーは性別です

  • 次の場合volatile-lru をフォローすると年齢が削除されます

  • volatile-lfu をフォローすると性別が削除されます
    ##
  • #すべてのデータを検出

      #allkeys-lru: 最近使用されていないデータを選択します
    • #allkeys-lfu: 最近の使用頻度が最も低いデータを選択します
    • ##allkeys-random: データベース全体をランダムに削除します
    • #データのエビクションをあきらめる
  • no-enviction: メモリが使い果たされて oom エラーが発生するまで、データは削除されません。

    概要

ここで注意すべき点は、エビクション ポリシーでは、揮発性データは永続的な値ではなく、有効期限が設定されたキーを指すということです。 データベース全体は、有効期限と永続的なデータセットを含むすべての値を参照します。

学習の継続、ブログの継続、共有の継続は、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事がそうであることを願っています。助けてください。次号でお会いしましょう。

推奨事項: "

redis チュートリアル

"

以上がRedis の削除ポリシーとエビクション ポリシーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。