1

菲尔,我非常感谢你的回答。

至于我关于区域的问题,我试图掌握 API 的功能,而不是服务/应用程序/平台的架构或基础设施。

因此,我试图确定在不知道精确键或希望返回多个具有相关或相似键的对象时返回对象的能力有哪些限制。

当我检查 API 时,我没有看到任何“查询语言”,并且似乎接近我上面描述的功能的唯一命令与“区域”相关联。

从围绕如何在平台中实现区域的描述的术语中,我推断(正确还是错误?)当一个区域被定义(创建?)时,它将仅部署在一个缓存服务器中的多个缓存服务器上。 AppFabric 的多服务器实现。

也就是说,在我看来,所描述的是 AppFabric 中的“命名空间”[区域]对于 AppFabric 平台展示的任何“索引”功能都是基础。而且这个“命名空间”只能在单个服务器的边界内实现,有点像 SharePoint Search 最初是单个服务器,后来在多个服务器上启用。

综上所述,我猜测搜索依赖于基于区域的索引功能,因此“可搜索”键必然会导致缓存在“可搜索”区域中的所有数据都放置在一个区域中的限制,并且将导致数据在单个服务器上的区域“集中”。

我的问题是为了确认或阐明我的理解。

到目前为止,你已经回答了我的许多问题,但不是一个准确的问题。

谢谢,

金博尔

似乎“标签”允许我们将“搜索词”与放置在 Velocity 缓存空间中的对象相关联。

但是,这些只能在“区域”内查询。

此外,区域以某种方式将缓存中对象的局部性限制为单个服务器(或者可能是类似的东西)。

因此,如果缓存项的唯一 ID 未持久保存或持续提供给应用程序(该应用程序在缓存中存储和检索对象),这似乎使得执行任何操作变得困难。

无论如何,我看不到一种简单的方法来“清理”对象缓存或在整个缓存中查找可能在缓存键中共享某些前缀、后缀或中缀值的对象,以便我可以清除缓存例如,在单元测试中重复创建的对象。

而且我不确定区域与单个服务器缓存位置相关联的后果。

因此,对于以下问题,我将不胜感激:

  1. 使用区域时的“分布式缓存”(称为“分区”缓存??)和“本地缓存”有什么区别?

1.a. 特别是,分布式缓存中面向区域的值是否可以通过配置为“查看”整个缓存空间的缓存工厂可见?

  1. 创建和删除“区域”的操作是否足够有效,以至于为每个需要缓存的对象包创建一个区域和一组标签是合理的?

2.a. 或者这是否只是将“搜索对象”的范围问题推到了链上,因为 DataCache 对象向下查询区域和标签的能力与查询对象本身的缓存键一样有限。

谢谢,

斯塔托

4

1 回答 1

1

候选版本中(以及后来的 beta 版本),在添加带有标签的项目时使用区域的要求已被取消(尽管我偷偷怀疑在幕后有一个调用并且实际上正在cache.GetSystemRegionName使用一个区域) . 但是,请注意,我在周末与 Release Candidate 一起玩,当您尝试基于标签/标签集检索对象时,您需要提供区域名称。

在什么情况下,您会在缓存中保留一个没有唯一 ID 的对象?例如数据库密钥、AD guid 等。

在“清理”缓存方面,如果您确实使用了区域,则可以使用 ClearRegion 方法,或者您可以只删除该区域,这将从缓存中删除该区域内的所有对象。您可以创建一个扩展方法,对键进行模式匹配,并将其与 GetObjectsInRegion 和 GetSystemRegions 方法结合使用,以查找缓存中的所有对象,其中包含键中的一些令牌,但我认为这将非常低效,因为您有遍历每个项目以检查密钥。

1a。使用区域时的“分布式缓存”(称为“分区”缓存??)和“本地缓存”有什么区别?

AppFabric 中的(可选)本地缓存与“中央”缓存不同,因为它位于应用程序内部。每当您从“中央”缓存请求缓存对象时,该对象就会被缓存在本地缓存中。对该对象的后续请求将从本地缓存中完成。在您的 AppFabric 服务器与应用程序服务器不同的架构中,这可以为您节省一个网络跃点。

1b。特别是,分布式缓存中面向区域的值是否可以通过配置为“查看”整个缓存空间的缓存工厂可见?

不太确定我是否理解您对这个问题的理解,有权访问集群中所有服务器的 AppFabric 客户端(AppFabric 术语中的路由客户端)根据定义可以访问缓存中的每个区域。或者您是否关心相反的情况,例如,如果您的客户端只能访问集群中的服务器子集,但从服务器上的一个区域请求一个对象,它没有直接访问权限?在这种情况下,客户端确实有权访问的服务器将从另一台服务器上的区域检索对象并将其传递回客户端。

1c。创建和删除“区域”的操作是否足够有效,以至于为每个需要缓存的对象包创建一个区域和一组标签是合理的?

区域是为保存一组对象而设计的,例如产品、客户,因此是DataCache.GetObjectsInRegion方法,但不是临时创建区域,我认为最好一次性创建它们,例如在 ASP.NET 应用程序中的 Application_Start . 然而,标签的创建效率很高,因为它们或多或少只是字符串。

于 2010-06-05T22:45:55.917 回答