1

ほとんどのキャッシング サービスは、任意のオブジェクトをキーと値のペアとしてキャッシュすることをサポートしています。しかし、オブジェクトをリージョンまたはグループとしてキャッシュできる方法を探しています。つまり、キャッシュ オブジェクトはグループ化できる必要があります。1 つ以上のオブジェクトがグループにキャッシュされます。グループに対して行うこと (削除、更新) は、グループ内のオブジェクトに影響を与えるはずです。

いくつかのキャッシング サービスについて検索したところ、JCS がこれをサポートしていることがわかりました。ほとんどのキャッシング サービスで使用できる一般的な方法を実装することになっています。役立つ方法や支援リソースを知っている人はいますか?

編集: @ cruftex: 小さな店の在庫システムを想定します。文房具、野菜、果物、お菓子があり、それらの価格やその他の詳細をキャッシュする必要があります。食べることができるアイテム (野菜、果物、お菓子) のみを消去または更新する必要があり、キャッシュされている文房具やその他の食べられないオブジェクトのセットは必要ない場合はどうすればよいですか? 「食べられる」、「食べられない」のようにグループ化する方法があれば、特定のグループを取得または変更して、すべてのグループ メンバー インスタンスが影響を受けるようにすることができます。

4

1 に答える 1

2

現時点では、あなたの使用シナリオが特別なキャッシュ機能を正当化するとは思えません。

  1. Cache.put() を介してライトスルー構成で製品を更新すると、キャッシュは自動的に同期されます。

  2. JPA などの永続化レイヤーを使用する場合、その内部キャッシュも同期されます。

  3. 自分でキャッシュの制御を担当している場合は、どのオブジェクトがグループに属しているかを知り、無効化を行うだけで済みます。次に例を示します。

    Cache<Integer,Set<Integer>> groupId2productsId = ....
    Cache<Integer, Product> productId2product = ....
    
    void invalidateGroup(int id) {
      productId2product.removeAll(groupId2productsId.get(id));
    }
    
  4. もちろん、商品を複数のキャッシュ (またはリージョン) に分割することもできます。次に、通常のキャッシュの上にパーティション アルゴリズムを実行します。しかし、これは柔軟性に欠けるアプローチです。分割基準が複数ある場合や重複がある場合は、問題が発生します。

一般的な注意: 基準によってオブジェクトのグループに対処するには、インデックス構造が必要です。または、すべてを反復処理します。通常、これはデータベースの仕事です。EHCache には検索機能が組み込まれているため、キャッシュ内のオブジェクトをクエリして無効にすることができますが、EHCache に高速なインデックス付きの実装があるとは思えません。このようなものをキャッシュに入れることが理にかなっているかどうかは考えますが、「標準」ベースのソリューションにはなりません。

于 2014-03-12T17:51:41.007 に答える