2012-02-08 27 views
2

我正在用spring.net建立一個使用緩存的存儲庫。我可以更新/添加/刪除緩存列表中的一個項目,而無需重建整個列表?在存儲庫中使用spring.net更新緩存的一部分可能嗎?

從他們的站點查看文檔和示例項目時,他們總是在更新/添加/刪除一個項目時清除緩存。因此,只要你只讀取一個對象或對象列表,緩存就能正常工作,但是因爲我改變了一個項目而不得不重建整個緩存?

例子:

// 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

存儲在緩存中有可變的東西在我看來,可怕的副作用的噴泉。如果你想添加/刪除緩存列表中的條目,你將需要Imho。

CacheResultAdviceInvalidateCacheAdvice的實施允許存儲並使object(密鑰) - >object(值)組合無效。您可以添加另一個圖層併爲每部電影檢索電影,但我認爲這只是過早優化的一種情況(具有相反的效果)。

CacheResultAdvice

InvalidateCacheAdvice

編輯: 順便說一句。如果您使用成熟的ORM外觀進行集成級別2高速緩存,如果要避免碰到數據庫服務器:http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate

+0

謝謝!過了一段時間後,我回到了這一點,即使我有點困惑,我接受了解決方案。我只是希望有人會在spring.net緩存中擴展文檔。 :) – Lilja 2012-03-25 20:52:25

相關問題