在N层体系结构中,最好使用哪种模式以便保持缓存清洁?
我知道设置绝对/滑动超时很容易,但有更好的机制可以让您在更新基础持久性后将缓存标记为脏。
我试图解决的困难是Cache通常存储为KVP。但是查询通常比这更复杂。那么网关服务如何告诉缓存存储,对于这样的查询,它需要从持久性中重新获取。
我也无法为每个查询手动编写缓存更新代码。我正在寻找一种更系统的方法。
这只是一个梦想,还是有办法优雅地做到这一点?
链接/指南/发布赞赏。
答案 0 :(得分:3)
我曾与AppFabric合作过,我想我会尝试做你要问的事情。我正在拍卖网站上工作,我想积极地使缓存中的项目无效。
例如,我们有列表(待售物品),它们将存在于整个缓存(AppFabric)中。代表商家信息的数据分布在10个不同的地方。我最初想要的是一种方式来说,“好吧,我的列表已经改变。让我去找到缓存中存在的任何地方,然后更新。” (我想你在问题中说“标记为脏”)
我发现这样做非常困难。我尝试使用AppFabric中的标签,因此我会使用标记标记给定对象(或对象集合),这样我就可以查询缓存并删除项目。换句话说,如果一个对象有一个LISTING标签,我会找到它并使其无效。
最终我采取了双管齐下的攻击。</ p>
对于95%的数据,我让它过期。我决定这是一个快乐的日子,因为一切都变得更容易开发。我不得不在UI等方面做出一些让步,但这非常值得。
对于最后5%的数据,我决定只存储一次。例如,对商家信息的出价。每当有新的出价时,我们会主动使该对象无效,然后所有需要该信息的内容也会更新。