我正在使用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);
}
}
答案 0 :(得分:2)
在缓存中存储可变的东西似乎是一个可怕的副作用的源泉。如果要添加/删除缓存列表中的条目,则需要Imho。
CacheResultAdvice
和InvalidateCacheAdvice
的实施允许存储object
(密钥) - &gt; object
(值)组合。您可以为每部电影添加另一个图层并检索电影,但我认为这只是一个过早优化的情况(效果相反)。
编辑: 顺便说一句。如果您使用成熟的ORM外观进行集成的level2缓存,如果您想避免命中数据库服务器:http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate