可以使用存储库中的spring.net更新部分缓存吗?

时间:2012-02-08 12:35:14

标签: c# 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);
    }
}

1 个答案:

答案 0 :(得分:2)

在缓存中存储可变的东西似乎是一个可怕的副作用的源泉。如果要添加/删除缓存列表中的条目,则需要Imho。

CacheResultAdviceInvalidateCacheAdvice的实施允许存储object(密钥) - &gt; object(值)组合。您可以为每部电影添加另一个图层并检索电影,但我认为这只是一个过早优化的情况(效果相反)。

CacheResultAdvice

InvalidateCacheAdvice

编辑: 顺便说一句。如果您使用成熟的ORM外观进行集成的level2缓存,如果您想避免命中数据库服务器:http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate