【问题标题】:AppFabric Cache 'Design' - Caching Individual Items or Collections?AppFabric 缓存“设计” - 缓存单个项目或集合?
【发布时间】:2012-01-03 22:40:21
【问题描述】:

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

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

由于数据更新频率非常低,我们还预先计算了一些查找

  • ProductsByCategory(即字典)

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

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

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

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

【问题讨论】:

    标签: appfabric


    【解决方案1】:

    目前对“批量放置”类型操作的支持有点,嗯,有限(阅读:不存在)。但稍加思考表明这可能是正确的 - 如果您将一组对象扔到缓存中,它就不会知道如何为它们提供有意义的键或标签(稍后会更多)。您可以使用一个扩展方法来伪造它,该方法接受对象集合并查看每个对象的 Name 或 Id 属性以将对象放入缓存中,但在幕后它仍然会沸腾每次将对象放入缓存中。

    然而,为了从缓存中取出一组对象,GetObjectsInRegion(regionname) 方法还有另一个选项。如果在将对象插入缓存的地方添加标签,例如对于产品,使用类别对其进行标记,稍后您可以使用GetObjectsByTag 方法获取特定标记的所有对象。使用标签的好处(我认为)是您可以将任意数量的标签放在缓存中的对象上,例如对于产品,您可以用类别标记它,也可以用供应商标记它,比如价格带。这为您查询缓存项目的方式提供了更大的灵活性 - 您可以通过任何单个标签进行查询,或者您可以使用 GetObjectsByAllTags/GetObjectsByAnyTag 方法进行 AND/OR 查询。

    【讨论】:

    • 虽然包含标签很有用,但如果您需要像 >
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多