AppFabric Cache'Design' - 缓存单个项目或集合?

时间:2010-11-17 03:11:51

标签: appfabric

我们正在将我们的一个Web应用程序从单个服务器扩展到Web场。应用程序当前使用Http运行时缓存来缓存应用程序的引用数据。数据与产品目录“相似”:

  • 类别(即列表)
  • 产品(即清单)

由于数据很少更新,我们还预先计算了一些查找

  • ProductsByCategory(即词典)

集合当前被缓存为整个对象...即整个列表/字典是get和put。这些集合通常用于我通常需要填充下拉列表/列表框/等等。

参考数据需要在服务器场中的服务器之间保持同步。输入AppFabric ...

  1. 我们的上述缓存模型是否仍适用于AppFabric缓存?我遇到的示例似乎将单个项目放在缓存中而不是整个集合中(“区域”用于批量获取操作)

  2. 最好的方法是保持参考数据“一起”更新......如果类别被刷新,我需要刷新产品以反映最新的类别。

    < / LI>

2 个答案:

答案 0 :(得分:2)

支持'批量放置'型操作有点,嗯,目前有限(读:不存在)。但是有一点想法表明这可能是正确的 - 如果你在缓存中抛出一组对象,它就不会知道如何给它们有意义的键或标签(其中更多的是在一瞬间)。你可以使用扩展方法伪造它,该扩展方法接受一组对象,并查看每个对象上的Name或Id属性,以便将对象放入缓存中,但在掩护下它仍然会沸腾向下将对象一次放入缓存中。

但是,要从缓存中获取一组对象,GetObjectsInRegion(regionname)方法还有另一种选择。如果在将对象插入缓存的位置向其添加标记,例如对于产品,使用类别对其进行标记,稍后您可以使用GetObjectsByTag方法获取特定标记的所有对象。关于使用标签的好处(我认为)是你可以将任意数量的标签放在缓存中的对象上,例如对于产品,您可以使用该类别标记,也可以使用供应商标记,例​​如,价格区域。这使您可以更灵活地查询缓存项目 - 您可以按任何单个标记进行查询,也可以使用GetObjectsByAllTags / GetObjectsByAnyTag方法进行AND / OR查询。

答案 1 :(得分:1)

我自己也遇到过同样的问题。使用本地缓存,使用区域中的单个实体,并使用区域级通知回调

相关问题