検索
ホームページデータベースRedisRedis キャッシュの削除戦略について話しましょう

Redis キャッシュの削除戦略について話しましょう

Oct 27, 2021 am 10:24 AM
redis排除戦略キャッシュ

Redis キャッシュの削除戦略は何ですか?この記事では、Redis のキャッシュ削除戦略について説明し、キャッシュ戦略設定の提案を紹介します。

Redis キャッシュの削除戦略について話しましょう

リモート辞書サービスである Redis (Remote Dictionary Server) は、ANSI C 言語で書かれたオープン ソースのログ タイプで、ネットワークをサポートしており、メモリや永続性、Key-Value データベースを備え、複数の言語で API を提供します。 [関連する推奨事項: Redis ビデオ チュートリアル ]

これには次の特徴があります:

  • メモリに基づいて実行され、高いパフォーマンス機能を備えています
  • キー/値ストレージ構造の分散型で理論上無制限の拡張をサポートし、効率的なクエリ
  • は複数の開発言語 API を提供し、既存のビジネス システムとの統合が容易です。

通常、ビジネス システムで分散キャッシュ、集中セッション ストレージ、分散ロック、その他のアプリケーション シナリオに使用されます。

ローカル キャッシュでも分散キャッシュでも、より高いパフォーマンスを確保するために、データを保存するためにメモリが使用されます。コストとメモリの制限により、保存されたデータがキャッシュ容量を超える場合、キャッシュされたデータはキャッシュされる。一般的な削除戦略には、最も古いデータを削除する FIFO、最も最近使用されていないデータを削除する LRU、および最も最近使用されていないデータを削除する LFU が含まれます。

Redis キャッシュ削除ポリシー トリガー

運用環境では、Redis にスワップ動作を許可しません。したがって、最大メモリ使用量は一般に制限されており、Redis では最大メモリ使用量を指定するための構成パラメータ maxmemory が提供されています。

次の構成は有効です:

maxmemory 1000KB 
maxmemory 100MB 
maxmemory 1GB 
maxmemory 0  # 表示不做限制,一般不会用

redis.conf 構成ファイルは次のとおりです

Redis キャッシュの削除戦略について話しましょう

#8 8 Redis キャッシュ戦略

  • volatile-lru はタイムアウトを設定してデータの中で最も使用頻度の低いデータを削除します;

  • allkeys-lru はすべてのキーをクエリします 削除データ内で最も使用頻度の低いデータ。これは最も広く使用されている戦略です。

  • volatile-random はタイムアウトを設定したデータをランダムに削除します。
  • allkeys-random はすべてのクエリを実行します。
  • volatile-ttl は、設定されたタイムアウトですべてのデータをクエリし、すぐに並べ替えて、期限切れが近づいているデータを削除します。
  • noeviction (デフォルト) に設定されている場合この属性では、削除操作は実行されず、メモリがオーバーフローした場合はエラーが返されます。
  • volatile-lfu は、有効期限が設定されたすべてのキーから最も使用頻度の低いキーを削除します。;

  • #allkeys-lfu は、すべてのキーから最も使用頻度の低いキーを削除します。
##Redis ベースの LRU および LFU アルゴリズム

##LRU アルゴリズム

Redis LRU アルゴリズムは正確な実装ではありません。これは、Redis が best

エビクション候補

、つまり過去に最も多くのアクセスを行った候補を選択できないことを意味します。代わりに、少数のキーをサンプリングし、サンプリングされたキーのうち最良の (アクセス時間が最も早い) キーを排除することによって、LRU アルゴリズムの近似を実行しようとします。 ただし、Redis 3.0 以降では、アルゴリズムが改善され、エビクションに適した候補をいくつか選択できるようになりました。これによりアルゴリズムのパフォーマンスが向上し、実際の LRU アルゴリズムの動作にさらに近づけることができます。 Redis LRU アルゴリズムで重要なのは、エビクションごとにチェックするサンプルの数

を変更することで、

アルゴリズムの精度を

調整できることです。このパラメーターは、次の構成ディレクティブによって制御されます。

maxmemory-samples 5
Redis が真の LRU 実装を使用しない理由は、より多くのメモリが必要になるためです。ただし、Redis を使用するアプリケーションの場合、近似は実際には同等です。以下は、Redis で使用される LRU 近似値と実際の LRU の比較表です。

#上記のグラフを生成するテストでは、Redis サーバーに指定された数のキーを設定します。キーは最初から最後までアクセスされるため、最初のキーが LRU アルゴリズムを使用したエビクションの最適な候補となります。その後、古いキーの半分を強制的に削除するために、さらに 50% のキーが追加されました。

画像には 3 種類の点があり、3 つの異なるバンドを形成していることがわかります。 Redis キャッシュの削除戦略について話しましょう

薄灰色のバンドは、排除されたオブジェクトです。

灰色のバンドは、排除されていないオブジェクトです。

  • #緑のバンドは追加されたオブジェクトです。
  • 理論的な LRU 実装では、古いキーのうち前半が期限切れになることが予想されます。 Redis LRU アルゴリズムは、古いキーを
の確率
    でのみ期限切れにします。
  • LRU は、特定のキーが将来アクセスされる可能性を予測するモデルにすぎません。さらに、データ アクセス パターンがべき乗則によく似ている場合、ほとんどのアクセスは LRU 近似アルゴリズムが適切に処理できるキー セット内になります。

欠点: 大量のホット データを生成するために、一定期間内に大量のコールド データにアクセスする可能性があります。

LFU 算法

从 Redis 4.0 开始,可以使用新的最不常用驱逐模式。这种模式在某些情况下可能会更好(提供更好的命中率/未命中率),因为使用 LFU Redis 会尝试跟踪项目的访问频率,因此很少使用的项目会被驱逐,而经常使用的项目有更高的机会留在记忆中。

如果您认为在 LRU,最近访问过但实际上几乎从未被请求过的项目不会过期,因此风险是驱逐将来有更高机会被请求的密钥。LFU 没有这个问题,一般应该更好地适应不同的访问模式。

配置LFU模式,可以使用以下策略:

  • volatile-lfu 在具有过期集的键中使用近似 LFU 驱逐。
  • allkeys-lfu 使用近似 LFU 驱逐任何密钥。

LFU 类似于 LRU:它使用一个概率计数器,称为莫里斯计数器,以便仅使用每个对象的几位来估计对象访问频率,并结合衰减周期,以便计数器随着时间的推移而减少:在某些时候,我们不再希望将密钥视为经常访问的密钥,即使它们过去是这样,以便算法可以适应访问模式的转变。

这些信息的采样与 LRU 发生的情况类似(如本文档的前一部分所述),以便选择驱逐的候选人。

然而,与 LRU 不同的是,LFU 具有某些可调参数:例如,如果不再访问频繁项,它的排名应该以多快的速度降低?还可以调整 Morris 计数器范围,以便更好地使算法适应特定用例。

默认情况下,Redis 4.0 配置为:

  • 在大约一百万个请求时使计数器饱和。
  • 每一分钟衰减一次计数器。

这些应该是合理的值并经过实验测试,但用户可能希望使用这些配置设置以选择最佳值。

有关如何调整这些参数的说明可以redis.conf在源代码分发的示例文件中找到,但简单地说,它们是:

lfu-log-factor 10 
lfu-decay-time 1

衰减时间是显而易见的,它是计数器应该衰减的分钟数,当采样并发现它比该值更旧时。一个特殊值0意味着:每次扫描时总是衰减计数器,很少有用。

计数器对数因子会改变需要多少次命中才能使频率计数器饱和,这恰好在 0-255 的范围内。系数越高,需要越多的访问以达到最大值。根据下表,系数越低,低访问计数器的分辨率越好:

+--------+------------+------------+------------+------------+------------+
| factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
+--------+------------+------------+------------+------------+------------+
| 0      | 104        | 255        | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 1      | 18         | 49         | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 10     | 10         | 18         | 142        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 100    | 8          | 11         | 49         | 143        | 255        |
+--------+------------+------------+------------+------------+------------+

淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

缺点:

1. 最近加入的数据常常容易被剔除,因为其起始方法次数比较少,

2. 如果频率时间度量为 1 个小时,则平均一天每个小时内访问频率 1000 的热点数据可能会被 2个小时的一段时间访问的频率为 1001 的数据剔除掉。可能会出现一些临界值的数据。

缓存策略设置建议

建议:了解Redis 的淘汰策略之后,在平时使用尽量主动设置/更新 key 的 expire 时间主动剔除不活跃的旧数据, 有助于提升查询性能

更多编程相关知识,请访问:编程入门!!

以上がRedis キャッシュの削除戦略について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis:一般的なデータ構造のガイドRedis:一般的なデータ構造のガイドApr 11, 2025 am 12:04 AM

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターを実装する方法Redisカウンターを実装する方法Apr 10, 2025 pm 10:21 PM

Redisカウンターは、R​​edisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

Redisコマンドラインの使用方法Redisコマンドラインの使用方法Apr 10, 2025 pm 10:18 PM

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

Redisクラスターモードの構築方法Redisクラスターモードの構築方法Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisキューの読み方Redisキューの読み方Apr 10, 2025 pm 10:12 PM

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redisクラスターzsetの使用方法Redisクラスターzsetの使用方法Apr 10, 2025 pm 10:09 PM

RedisクラスターでのZsetの使用:Zsetは、要素をスコアに関連付ける順序付けられたコレクションです。シャード戦略:a。ハッシュシャーディング:ZSTキーに従ってハッシュ値を分配します。 b。範囲シャード:要素スコアに従って範囲に分割し、各範囲を異なるノードに割り当てます。操作の読み取りと書き込み:a。読み取り操作:ZSetキーが現在のノードのシャードに属している場合、ローカルで処理されます。それ以外の場合は、対応するシャードにルーティングされます。 b。書き込み操作:Zsetキーを保持しているシャードに常にルーティングされます。

Redisデータをクリアする方法Redisデータをクリアする方法Apr 10, 2025 pm 10:06 PM

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redisの有効期限ポリシーを設定する方法Redisの有効期限ポリシーを設定する方法Apr 10, 2025 pm 10:03 PM

Redisデータの有効期間戦略には2つのタイプがあります。周期削除:期限切れのキーを削除する定期的なスキャン。これは、期限切れの時間帯-remove-countおよび期限切れの時間帯-remove-delayパラメーターを介して設定できます。怠zyな削除:キーが読み取られたり書かれたりした場合にのみ、削除の有効期限が切れたキーを確認してください。それらは、レイジーフリーレイジーエビクション、レイジーフリーレイジーエクスピア、レイジーフリーラジーユーザーのパラメーターを介して設定できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境