C# 是否可以在存储库中使用spring.net更新部分缓存?

C# 是否可以在存储库中使用spring.net更新部分缓存?,c#,spring.net,C#,Spring.net,我正在使用spring.net构建一个带有缓存的存储库。我是否可以更新/添加/删除缓存列表中的一项,而不必重新生成整个列表 从他们的站点查看文档和示例项目,他们总是在更新/添加/删除一项时清除缓存。因此,只要您只读取一个对象或对象列表,缓存就可以很好地工作,但仅仅因为我更改了一个项目就必须重建整个缓存,这感觉很愚蠢 例如: // Cache per item and a list of items [CacheResult("DefaultCache", "'AllMovies'", TimeT

我正在使用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);
    }
}
//缓存每个项目和项目列表
[CacheResult(“DefaultCache”,“AllMovies”,TimeToLive=“2m”)]
[CacheResultItems(“默认缓存”,“电影-”+ID”)]
公共IEnumerable FindAll()
{
返回电影。价值观;
}
//更新或添加使对象列表无效的项
[InvalidateCache(“DefaultCache”,key=“'AllMovies'”)]
公共无效保存([CacheParameter(“DefaultCache”),“'Movie-'+ID”)]Movie-Movie)
{
if(this.movies.ContainsKey(movie.ID))
{
this.movies[movie.ID]=电影;
}
其他的
{
this.movies.Add(movie.ID,movie);
}
}

在我看来,将易变的东西存储在缓存中似乎是可怕的副作用的源泉。如果您想从缓存列表中添加/删除条目,那么这就是您需要的

CacheResultAdvice
InvalidateCacheAdvice
的实现允许存储
对象
(键)->
对象
(值)组合并使其无效。您可以添加另一层并检索每部电影的电影,但我认为这只是一个过早优化的例子(效果相反)

编辑:
顺便说一句,如果您使用成熟的ORM,请寻找集成的level2缓存,如果您希望避免命中db服务器:

谢谢!过了一段时间,我回到了这个问题上,即使我有点困惑,我还是接受了这个解决方案。我只希望有人能扩展spring.net缓存上的文档。:)