2012-02-08 9 views
2

私はspring.netを使ってキャッシュするリポジトリを構築しています。リスト全体を再構築することなく、キャッシュリスト内の1つのアイテムを更新/追加/削除できますか?リポジトリでspring.netを使用してキャッシュの一部を更新できますか?

サイトからドキュメントとサンプルプロジェクトを見ると、1つのアイテムを更新/追加/削除するたびに常にキャッシュがクリアされます。したがって、オブジェクトまたはオブジェクトのリストだけを読む限り、キャッシュは正常に機能しますが、1つのアイテムを変更するだけで、キャッシュ全体を再構築する必要があります。

例:キャッシュに格納されて

// Cache per item and a list of items 
[CacheResult("DefaultCache", "'AllMovies'", TimeToLive = "2m")] 
[CacheResultItems("DefaultCache", "'Movie-' + ID")] 
public IEnumerable<Movie> FindAll() 
{ 
    return movies.Values; 
} 

// Update or add an item invalidating the list of objects 
[InvalidateCache("DefaultCache", Keys = "'AllMovies'")] 
public void Save([CacheParameter("DefaultCache", "'Movie-' + ID")]Movie movie) 
{ 
    if (this.movies.ContainsKey(movie.ID)) 
    { 
     this.movies[movie.ID] = movie; 
    } 
    else 
    { 
     this.movies.Add(movie.ID, movie); 
    } 
} 

答えて

2

持つ可変事が私には恐ろしい副作用の噴水です。あなたがキャッシュされたリストからエントリを追加/削除したい場合に必要なものです。 >object(値)の組み合わせ -

CacheResultAdviceInvalidateCacheAdviceの実装はobject(キー)を格納し、無効化することを可能にします。別のレイヤーを追加してムービーごとにムービーを取得することもできますが、それは早すぎる最適化のケースであると思います(反対の効果があります)。

CacheResultAdvice

InvalidateCacheAdvice

編集:ところで 。成熟したORMの外観を使用して統合されたレベル2のキャッシュを使用している場合は、dbサーバを避けたい場合:http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate

+0

ありがとう!しばらくして私はこれに戻り、ちょっと混乱したとしても解決策を受け入れる。私は誰かがspring.netのキャッシュでドキュメントを拡張することを望みます。 :) – Lilja

関連する問題