キャッシュ内のデータ構造の動作と使用法
NCache は、キーが任意のプリミティブ型、カスタム オブジェクト、値に対する文字列型であるキーと値のペア構造をサポートします。 キャッシュ項目, or a data structure. グループ, タグ, 満了, ロッキング, 依存関係などの値をこれらの値に割り当てることができます。
Note
この機能は、 NCache Enterprise.
ただし、データ構造内の値 (たとえばリスト) を更新するには、キャッシュから値をフェッチし、更新し、キャッシュに再度追加する必要がありました。 これにより、ネットワーク上でさらに呼び出しが発生しました。 NCache では、サーバー上で直接データを操作することによるデータ構造の追加/更新の排他的なサポートを提供することで、この制限を排除しました。 したがって、全体的なパフォーマンスが向上します。
NCache 次のデータ構造を明示的にサポートします。
- リスト
- キュー
- ハッシュセット
- 辞書
- カウンター
ネイティブ データ構造インターフェイスによって提供される機能とは別に、 NCache を使用してメタデータを指定するオプションを提供することで、その機能を拡張します。 CacheItem
。 これは、キャッシュの他のオブジェクトと同様に、データ構造がタグ、有効期限、依存関係を持つことができることを意味します。
重要
データ構造全体は、クラスター化されたキャッシュの 100 つのノードに存在します。 たとえば、100 項目の辞書を作成した場合、XNUMX 項目の辞書全体が XNUMX つのノードに存在し、他のノードには分散されません。
次の図は、3 ノードのクラスター化キャッシュに存在するそれぞれのキャッシュ キーに対するさまざまなデータ構造を示しています。
機能の賢明な振る舞い
Storage
データ構造内に格納されているアイテムはすべて JSON シリアル化され、サーバー上のネイティブ操作をサポートします。
Contains
.データ構造には、キャッシュ サイズに影響を与えるメタデータとともに独自のサイズがあります。
PrimaryFieldアノテーション
[プライマリフィールド] アノテーションは、List や Queue などのデータ構造のユーザー モデル クラスで使用できます。 データ構造に対する検索操作。 Contains
を使用すると、オブジェクト全体をシリアル化してサーバーに転送するのではなく、その属性/プロパティのみをシリアル化して送信できます。 だけ PrimaryField
属性がサーバーに送信され、サーバー側で比較されるため、操作のコストが削減されます。
例えば、 Customer
クラスにはプロパティが含まれています CustomerId
、ユニークです。 これは次のようにマークできます。 PrimaryField
そして、完全なオブジェクトを比較する代わりに、たとえば、 Contains
だけを比較すると、 PrimaryField
操作を完了することができます。
class Customer
{
[PrimaryField]
public string CustomerId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
キャッシュキー
のデータ構造 NCache 名前が付けられます。つまり、他のオブジェクトと同様にキャッシュ キーに対して保存されます。 NCache。 キャッシュキーが存在する場合、 CacheItem
、データ構造に対して使用することはできません。
検索可能な機能
グループ、タグ、名前付きタグなどの検索可能な属性は、データ構造の作成時にデータ構造に対して指定できます。 あ CacheItem
データ構造は同じグループ/タグ/名前付きタグに属することができます。 詳細については、を参照してください。 検索可能な属性を構成する.
データ無効化機能
立ち退き
データ構造全体が「削除される」カテゴリに該当する場合、キャッシュから削除されます。 データ構造の作成によってエビクションが発生する可能性があるだけでなく、データ構造に対する書き込み操作によってもエビクションが発生する可能性があります。 たとえば、削除基準が満たされるように項目がリストに追加されます。
満了
データ構造は、指定された時間が経過するとキャッシュから無効化できます。 CacheItem
。 データ構造は両方をサポートしています。 絶対有効期限 および スライド式の有効期限.
キャッシュの依存関係
データ構造はすべてのキャッシュ依存関係をサポートします。 キーベースの依存関係の場合、リストは CacheItem
およびその逆。 詳細については、を参照してください。 無効化属性の構成.
データ構造のクエリ
データ構造は、キャッシュ内で照会できます。 検索可能な属性 設定されています。 検索可能な属性には次のものが含まれます。
- グループ
- タグ
- 名前付きタグ
詳細については、 データ構造に関するクエリ.
バッキングソースプロバイダー
リードスルー
これはコレクション レベルのみです。 データ構造は、キャッシュ内に見つからない場合、データ ソースから直接読み取ることができます。 データ構造の個々の項目はデータ ソースから読み取られません。 したがって、項目のリスト全体をデータ ソースからフェッチする必要があります。
ライトスルー
ライトスルーは次の XNUMX つの場合にトリガーされます。
- キャッシュ内でのデータ構造の作成時 (コレクション レベル)。
- 既存のデータ構造 (項目レベル) にデータを追加するとき。
キャッシュローダーとリフレッシャー
キャッシュ起動ローダー機能を使用すると、キャッシュ起動時にデータ構造をキャッシュに自動的にロードできます。 これにはインターフェースの実装が必要です ICacheLoader
そのメソッドとともに。 また、データに変更・更新があった場合には、 Cache Refresher
データを更新するために使用されます。 詳細については、を参照してください。 キャッシュローダーとリフレッシャー.
クライアントキャッシュ
データ構造はクライアント キャッシュに保存されません。 どれでも 入手 この操作では、メイン キャッシュからキャッシュがフェッチされますが、クライアント キャッシュには保存されません。 詳細については、を参照してください。 クライアントキャッシュ。 たとえば、辞書をロックすると、辞書全体がロックされ、それ以上の操作はできなくなります。
ロッキング
NCache データの同期と、さまざまな並列クライアントによって更新されるキャッシュ ストア内の整合性のための効率的なロック メカニズムを提供します。 NCacheの内部ロックにより、同じデータ構造の更新ごとに、キャッシュ クラスター全体にわたるデータ構造の一貫性が保証されます。 たとえば、全体 辞書 辞書をロックするとロックされます。
イベント通知
キャッシュ レベルのイベントとキー ベースのイベントは、データ構造レベルのイベントとともにサポートされており、データ構造に一緒に登録できます。 例えば:
キャッシュ内にリストが作成されます。 これにより、
ItemAdded
データ構造イベントではなく、キャッシュ レベル イベント。このリストに項目が追加されます。 これにより、
ItemUpdated
キャッシュ レベル イベントのリストが更新され、ItemAdded
データ構造イベントが新しい項目としてリストに追加されました。
制限事項
- ネストされたデータ構造はまだサポートされていません。
-
CacheItem
データ構造内に格納することはできません。 たとえば、次のリストCacheItems
まだサポートされていません。 - HashSet のカスタム オブジェクトはまだサポートされていません。
- 辞書キーは文字列型のみにすることができます。
トポロジーの賢明な振る舞い
ミラートポロジ
ミラートポロジ、操作はアクティブ ノードで実行されます。 これらの操作はパッシブ ノードに複製されます。
複製されたトポロジー
複製されたトポロジーの場合、操作はクライアントが接続されているノードで実行され、操作がすべてのノードにレプリケートされます。
パーティション化されたトポロジ
In パーティション化されたトポロジ、データ構造全体が同じノード上に存在します。 キーに基づいて配布されます。 これは、辞書がどれほど大きくても、辞書は XNUMX つのノード上に存在することを意味します。 辞書自体はノード間で分割されません。
パーティションレプリカトポロジ
In パーティションレプリカトポロジの場合、操作はパーティション化されたトポロジの場合と同じように動作します。 データ構造はキャッシュ キーに基づいて分散され、同じノード上に存在します。 そのレプリカは他のノードに存在します。
も参照してください
キャッシュ内のリストの動作と使用法
キャッシュでのキューの動作と使用法
キャッシュ内の動作と使用法を設定する
キャッシュ内の辞書の動作と使用法
キャッシュでのカウンターの動作と使用法