memcache 内の使用頻度の低いデータを定期的に削除する方法
タイトルにも記載しましたが、memcache 内のデータが無制限に増大するのを防ぐ方法と、長期間使用されていないデータや使用頻度が低いデータを定期的に削除する方法について説明します。 。オンラインで待っています!
-----解決策--------------------------------
memcache をセッションのようにしたり、Cookie のように有効期限を設定したりできることは知っていました
------解決策------
能力がある場合は、ルールをカスタマイズしてください。 memcache の実装を変更できる
------解決策------
memcache は各スラブのメモリ プールに基づいています。 LRU リンク リストを維持し、各 NODE にはライフ サイクルがあり、すべてのキャッシュ ノードがハッシュ テーブルを形成します。
memcache は遅延削除メカニズムを採用しており、そのメモリ要求ステップはおおよそ次の要求チェーンです: ノードのサイズに従ってスラブを見つけます ---> スラブの LRU 末尾から前方を探します。期限切れで、reference==1 NODE が見つかった場合、この NODE をハッシュ テーブルと LRU からリンク解除し、この NODE を LRU の先頭に挿入して参照を 1 に設定し、入力をノードの末尾に保存して再挿入します。見つからない場合は、NODE を格納するためにスラブに直接適用されます。これはメモリ プールの機能です。アプリケーションが失敗した場合、次の戦略は LRU を再スキャンして見つけることです。有効期限が切れていないが、reference==1 を持つノードを直接リサイクルする。これは最後の手段です。この戦略が失敗した場合、寿命が切れたノードを強制的にリサイクルするという方法が考えられます。 3 日で、現在の参照は != 1 です。これは小さなバグだったというコメントを覚えていますが、この方法で処理しても問題ありません。おそらく、このノードはどこにも参照されていないため、どこかで参照していることを意味します。 get/remove はペアになっていて、memcache のさまざまな関数に表示されるため、最初はこのバグがどこで発生したのかわかりません。
それで、理解できましたか? それは、できるだけ多くのメモリを割り当てるということです。外挿すると、プログラムの先頭に大量の malloc メモリが割り当てられます。メモリ プールであり、スラブによって管理されます。メモリの再利用は、定期的にスキャンするスレッドではなく、必要なときに検出する方法です。
------解決策---------