0

在 N 层架构中,最好使用什么模式来保持缓存清洁?

我知道设置一个绝对/滑动超时很容易,但是有没有更好的机制可以让您在更新底层持久性后将缓存标记为脏。

我试图解决的困难是缓存通常存储为 KVP。但是查询通常比这复杂一点。那么网关服务如何告诉缓存存储对于这样那样的查询,它需要从持久性中重新获取。

我也不能为每个查询手动编码缓存更新。我正在寻找一种更系统的方法。

这只是一个白日梦,还是有什么方法可以优雅地做到这一点?

链接/指南/帖子表示赞赏。

4

1 回答 1

3

我曾与 AppFabric 合作过,我认为尝试做你所要求的。我在一个拍卖网站上工作,我想主动使缓存中的物品无效。

例如,我们有列表(待售物品),它们将出现在整个缓存 (AppFabric) 中。代表列表的数据位于 10 个不同的位置。我最初想要的是一种表达方式,“好吧,我的列表已经改变了。让我去缓存中找到它存在的任何地方,然后更新。” (我认为您在问题中说“标记为脏”)

我发现这样做非常困难。我尝试使用 AppFabric 中的标签,因此我会用标签标记给定对象(或对象集合),这样我就可以查询缓存并删除项目。换句话说,如果一个对象有一个 LISTING 标签,我会找到它并使其无效。

最终,我选择了双管齐下的进攻。

  1. 对于 95% 的数据,我让它过期。当我决定这样做时,那是快乐的一天,因为一切都变得更容易开发。我不得不在 UI 等方面做出一些让步,但这是非常值得的。

  2. 对于最后 5% 的数据,我决定只存储一次。例如,对列表的出价。每当有新的出价出现时,我们都会主动使该对象无效,然后需要该信息的所有内容也会更新。

于 2013-01-28T03:26:16.327 回答