3

キャッシュに 2 つのアイテムがあります

  1. キー: 猫
  2. キー: Animal_Vacinations

現在、Animal_Vacinationsキーベースのキャッシュに依存していCatます。そのため、キャッシュ アイテムに何か変更があった場合Cat、キャッシュ アイテムAnimal_Vacinationsは無効になります。完全 :)

さて、問題です。

2 番目のキャッシュ アイテム (つまりAnimal_Vacinations) を作成した後、3 番目のキャッシュ オブジェクトを追加します。

  1. キー: 犬

問題は、2 番目のオブジェクトも依存関係を持つ必要があることDogです。2 番目のオブジェクトを作成する時点で、どのアイテムに依存する必要があるかを認識しています。したがって、この例では、Animal_Vacination オブジェクトは、依存する必要があることを認識しています ...

  1. ネコ
  2. ジョン・スキート

Animal_Vacination問題は、これら 4 つの依存関係すべてを使用してオブジェクトをキャッシュに挿入しようとすると、失敗することです。エラーはありません。失敗するだけです。(つまりCache["Animal_Vacination"] == null)。

この理由は、これら 4 つの依存関係を持つキャッシュ オブジェクトを挿入すると ...しかし、それらの依存関係の 1 つ以上が _存在しない_ ... 正常に失敗するためです。

残念。

上記の例では、欠落している 3 つのオブジェクトの 1 つが、2 つのオブジェクトが追加された直後に追加されるためです。

それで...キーベースのキャッシュ依存関係を持つオブジェクトをキャッシュに追加する方法はありますか?

4

2 に答える 2

1

I'm reluctant to call this an answer, as it makes a number of assumptions that should probably be clarified with additional questions first, but here goes.

Assuming there's a piece of code somewhere responsible for adding something to the cache with the key "Animal_Vacinations", and that code knows what other cached items the "Animal_Vacinations" item is dependent on it, then that code should create each of the necessary cache key dependencies, including adding Null objects to the cache, if necessary, for any dependent items not already found there.

So, for instance, in the example you give, where there is already "Cat" in the cache prior to adding "Animal_Vacinations", then the logic responsible for adding "Animal_Vacinations" to the cache should check the cache for the existence of each dependent item, i.e., "Cat", "Dog", "Bird", "Jon Skeet"; when one isn't found, a placeholder object or boxed value (maybe an empty string) should be added to the cache for that key (in this case, for "Dog", "Bird", and "Jon Skeet"); once all of the dependent items exist in the cache, then create your cache dependencies and add "Animal_Vacinations" to the cache. (Alternatively, call Cache.Add with a placeholder object for each of the required dependent keys, without first checking if they exist with a Get, and use an exception handler to swallow the exception thrown if it already exists.)

Continuing your example, when subsequent to this activity a real something is added to the cache with the "Dog" key, using Insert instead of Add in order to account for the possibility that the key already exists (as it does in this example), then the replacement of the "Dog" cache item, which was simply a Null value, will trigger the invalidation of the "Animal_Vacinations" cache item per its cache dependency.

于 2009-05-15T01:02:30.770 に答える
0

できることは、実際のアイテムを追加した後に依存関係を追加することです。次のようになります:
キー Cat
を追加します。キー Animal_Vacinationsを 追加します。Animal_Vacinations
のキャッシュ依存関係を追加します。Dog キーを追加します。Animal_Vacinations のキャッシュ依存関係を 編集して、dog が含まれるようにします。 Birdが含まれるように、Animal_Vacinations の キー Bird 編集キャッシュの依存関係を追加 します。





于 2009-05-14T11:37:14.933 に答える