「誰にとっても 640 KB で十分だ」という格言は、以前は広く受け入れられていました。 誰が言ったかについては意見の相違がありますが、現在では、コンピューティングにおける「十分」が何を意味するのかを誰も知ることができないという普遍的な合意があります。
このため、保持できるデータ量の見積もりを使用してキャッシュを設定するときは、キャッシュされたデータの一部を削除または排除する必要があります。 それなし 立ち退き、キャッシュがいっぱいになると、キャッシュからデータが削除されないため、データ追加の着信要求は受け入れられません。
図1 これを簡単な図で説明します。
エビクションを有効にすると、キャッシュは他のキャッシュアイテムと比較した使用状況または優先度に基づいてデータを削除します。 これにより、古い/優先度の低いアイテムがキャッシュから削除されると、キャッシュに追加できる受信データ用のスペースが解放されます。 図2 わかりやすくするためにこれを示しています。
どのように議論します NCache さまざまなエビクションポリシーをサポートおよび処理し、キャッシュで有効にする方法。
NCache 詳細 エビクションの構成– NCache ドキュメント NCache クライアントAPIドキュメント
のエビクションポリシー NCache
NCache あらゆるユースケースに対応するために、さまざまな種類のエビクションを提供します。
最近使用されていない(LRU)
最も一般的に使用されるエビクション ポリシーの XNUMX つは、 LRU. このエビクション ポリシーにより、キャッシュは、最近アクセスされたアイテムと比較して、長期間使用されていない最も古いキャッシュ アイテムを追い出すことができます。 データは、最終アクセス時間に基づいて削除されます。 アクセス時間は、キャッシュからフェッチされるか、キャッシュ内で更新されるときに、各キャッシュ項目のタイムスタンプとして更新されます。
キャッシュに、顧客が閲覧している製品のデータが含まれているとします。 キャッシュがいっぱいに近づいたら、しばらく表示されていない製品を削除するのが理にかなっています。
使用頻度が最も低い(LFU)
この削除ポリシーは、使用頻度の低いキャッシュ アイテムを削除します。 の LFU データは、その使用頻度/アイテムに対するヒット数に基づいて削除されます。 たとえば、5 回アクセスされたアイテムは、20 回アクセスされたアイテムよりも削除の対象として適しています。 これは、売れ筋商品が顧客に表示されており、キャッシュを削除する必要があるシナリオに役立ちます。 売れ筋アイテムほどアクセスされていないアイテムを削除しても、ユーザー エクスペリエンスには影響しません。
優先度ベースのエビクション
優先度に基づく立ち退き 重要度の低いデータを最初にキャッシュから追い出します。 キャッシュ データに優先順位を付けることができる場合は、データの削除方法をより細かく制御するために、この削除ポリシーを採用する必要があります。 優先順位は、キャッシュ アイテムをキャッシュに追加するときに指定されます。 次の優先度レベルから任意の優先度を指定できます。
- ロー
- 正常以下で
- ノーマル
- ノーマル上記
- ハイ
- 削除不可–この優先度レベルは、キャッシュアイテムを削除してはならず、次を使用してのみ構成できることを指定します。 NCache APIです。
これは、キャッシュに追加するときに各アイテムの優先度を簡単に指定する方法です。
1 2 3 4 5 6 7 8 9 |
Product product = FetchProductFromDB(1001); string key = $"Product:{product.ProductID}"; CacheItem cacheItem = new CacheItem(product) { Priority = CacheItemPriority.High }; cache.Add(key, cacheItem); |
NCache 詳細 エビクションの構成– NCache ドキュメント NCache クライアントAPIドキュメント
立ち退きアイテムの一括削除
削除中、アイテムは一括で削除されるため、アイテムを個別に削除してもパフォーマンスに影響はありません。 NCache 要件に応じて、バルクサイズとXNUMXつの連続するバルクエビクション間の遅延を簡単にカスタマイズできます。
Alachisoft.NCache.service.exe.config 内のファイル %NCHOME%/ bin / service、次のタグを使用してこれらの設定を構成できます。 詳細については、上のドキュメントを参照してください。 立ち退き設定の構成.
立ち退きのためのバルクサイズ
XNUMX回の一括呼び出しで削除するアイテムの数を指定できます。
1 |
<add key="NCacheServer.EvictionBulkRemoveSize" value="1000"/> |
エビクションバルク除去遅延
ここに示すように、エビクション除去呼び出し間の遅延(秒単位)を指定できます。 ゼロの値は、削除の遅延がないことを意味し、アイテムは削除を続けます。
1 |
<add key="NCacheServer.EvictionBulkRemoveDelay" value="5"/> |
Webマネージャーを介してEvictionを有効にする
一連のいくつかの簡単な手順で、立ち退きを有効にすることができます。 削除を有効にすると、削除率(削除される合計キャッシュサイズのパーセンテージ)をカスタマイズし、ポリシーと優先度を指定できます。
設定ファイルを介してエビクションを有効にする
キャッシュ構成ファイルを変更して、エビクションを構成することもできます(config.ncconf)。 下 <cache-settings>
タグ、以下を追加します <eviction-policy>
タグ:
1 2 3 |
<cache-settings ...> <eviction-policy enabled="True" default-priority="normal" policy="priority" eviction-ratio="5%"/> </cache-settings> |
NCache 詳細 エビクションの構成– NCache ドキュメント エディションの比較
クラスター環境でのエビクション
- 立ち退きが有効になると、立ち退きはによってインテリジェントに処理されます NCache 各キャッシュトポロジ:
- パーティション化された/レプリカのパーティションキャッシュ: In パーティション化 & レプリカのパーティション 各ノードにはデータのパーティションがあるため、各ノードは独自のデータを削除する責任があります。 partition-of-replica のレプリカ ノードの場合、アクティブ ノードからデータが削除されると、データは自動的に削除されます。
- 複製されたキャッシュ: In 複製 トポロジでは、すべてのノードが同じデータセットを持っているため、クラスターコーディネーターのみがエビクションを担当します。
- ミラーキャッシュ: In 鏡 キャッシュの場合、アクティブノードはキャッシュ全体でエビクションを実行する責任があります。
まとめ
キャッシュ操作を中断することなくキャッシュに適用するには、キャッシュが最新のデータを保持し、不要なデータを排除するようにする必要があります。 ここで、立ち退きが始まります。 立ち退きの設定は簡単で、残りはによって処理されます NCache そのもの。