Redis-17-メモリ淘汰ポリシー

3067 ワード

述べる


redisの期限切れポリシーについて説明しましたが、メモリ淘汰ポリシーについて説明します.
メモリ淘汰ポリシーとは、ユーザが格納したkeyの一部がRedisによってアクティブに削除され、missを読む可能性があることを指すが、なぜRedisにこのような機能があるのだろうか.
仮に私が今redisのサーバーを持っていて、メモリは2 Gで、システム業務の増加に従って、reidsの中に置くデータはますます多くなって、データの大きさはすでに2 Gを超えたかもしれませんが、この時応用はまだ正常に運行することができて、これはOSの中の可視メモリが物理メモリの制限を受けないためで、仮想メモリで、物理メモリが足りないならば、OSはハードディスクの上から1枚の空間を分けて仮想メモリを構築して、これはOSが私たちのために解決したので、しかし、不合理なメモリの使用は頻繁なswapが発生する可能性があり、頻繁なswapの代価は大きいので、私たちはやはり合理的なメモリの使用が必要で、できるだけオペレーティングシステムに解決させないでください
Redisのメモリ淘汰メカニズムは、メモリをよりよく使用するために、メモリの使用効率を一定のキャッシュmissで交換することです.

メモリ淘汰プロセス


メモリの廃棄プロセスは、次のようになります.
  • クライアントは、まず、setコマンド
  • のようなメモリを申請するコマンドを開始する.
  • Redisメモリの使用状況をチェックし、使用済みメモリがmaxmemoryより大きい場合、ユーザ構成の異なる淘汰ポリシーに従ってメモリを淘汰し始め、一定のメモリ
  • を交換する.
  • 上記に問題がなければ、このコマンドは
  • に成功します.

    メモリ淘汰ポリシー


    メモリ淘汰はRedisが提供する機能の一つにすぎません.この機能をよりよく実現するためには、異なるアプリケーションシーンに異なるポリシーを提供しなければなりません.メモリ淘汰ポリシーは、メモリ淘汰を実現するために具体的にどのようにしますか.解決する問題には、淘汰キー空間を含めてどのように選択しますか.キースペースでキーを淘汰するにはどうすればいいですか?
    redisは、ユーザーが選択できるメモリ淘汰ポリシーをいくつか提供します.
  • noeviction:メモリ使用がしきい値に達すると、申請メモリを引き起こすすべてのコマンドが
  • とエラーを報告する.
  • allkeys-lru:プライマリ・キー空間で、最近使用されていないkey
  • を優先的に除去する.
  • volatile-lru:有効期限が設定キースペースで、最近使用されていないキーを優先的に除去する.
  • allkeys-random:有効期限が設定されているキースペースから、キー
  • をランダムに削除します.
  • volatile-ttl:期限切れ時間が設定キースペースにおいて、より早い期限切れ時間を有するkeyが
  • を優先的に除去する.
    redisのデフォルトのメモリ淘汰ポリシーはnoevictionです.
    ここでは、プライマリ・キー領域と有効期限が設定されているキー領域を補足します.
    例えば、Redisに格納一連のキーがあるとすると、そのバッチキーとその値を格納するハッシュテーブルがあり、その一部に期限切れ時間が設定されている場合、このバッチキーは他のハッシュテーブルにも格納され、このハッシュテーブルの値はキーが設定期限切れ時間に対応する.有効期限が設定キー空間は、プライマリキー空間のサブセットである.
    簡単に言えば、プライマリ・キー・スペースは私たちのデータであり、有効期限が設定されているキー・スペースはキーとその有効期限です.

    構成方法


    我々はredisでconfではmaxmemoryという値を設定してメモリ淘汰機能をオンにします.最大使用可能なメモリです.maxmemoryが0の場合、Redisのメモリ使用に制限はありません.
    メモリ淘汰ポリシーの設定はmaxmemory-policyで構成され、デフォルトはnoevictionです.以下のようになります.
    maxmemory-policy noeviction
    

    淘汰ポリシーの選択方法


    構成はどのように組み合わせるか知っていますが、上の多くの戦略はどのように選択しますか?
    Redisに格納されているデータセットへのアプリケーション要求のアクセス方法と、要求が何であるかを理解する必要があります.また、RedisはRuntimeの淘汰ポリシーの修正をサポートし、Redisインスタンスを再起動する必要がなく、メモリ淘汰ポリシーをリアルタイムで調整することができる.
    いくつかのポリシーが適用されるシーンを見てみましょう.
  • allkeys-lru:キャッシュへのアプリケーションのアクセスがべき乗則分布(つまり相対的なホットスポットデータが存在する)に合致している場合、またはアプリケーションのキャッシュアクセス分布状況がよく分からない場合は、allkeys-lruポリシー
  • を選択できます.
  • allkeys-random:キャッシュキーへのアクセス確率が等しい場合、このポリシー
  • を使用できます.
  • volatile-ttl:この戦略により、eviction
  • に適したkeyをRedisに提示することができます.
    また、volatile-lruポリシーとvolatile-randomポリシーは、キャッシュおよび永続化ストレージに1つのRedisインスタンスを適用する場合に適していますが、2つのRedisインスタンスを使用することで同じ効果を達成することができます.keyを期限切れに設定すると、実際にはより多くのメモリが消費されるため、allkeys-lruポリシーを使用してメモリをより効率的に使用することをお勧めします.

    LRU


    redisが採用するLRUは非正確なLRUアルゴリズムであり、サンプリングに基づいて実現される.redisは単一スレッドであるため、全量のデータを用いてLRU計算を行うと、CPUリソースが比較的消費されるため、redisは重要なパラメータを提供する.
    maxmemory-samples 5
    

    このパラメータは、頻繁に使用されないキーを5つランダムに選択して削除するたびに、構成のパラメータ値が大きいほど、LRUの結果は全量LRUの結果に近いが、CPUに比較的大きなオーバーヘッドをもたらすため、redisをLRUキャッシュサービスとして使用するだけで、デフォルトの構成を維持することを推奨する
    テキストアドレス