3

在分布式缓存场景中,通常建议使用还是避免使用存储在缓存中的单体对象?

我正在使用由 EAV 模式支持的服务,因此我们将缓存放在适当的位置,以最大限度地减少 EAV 在从数据库中检索所有主记录和相应的属性集合时造成的感知性能缺陷。我们将在服务启动时启动缓存。

我们对所有产品的调用并不特别频繁——客户在他们第一次使用对象映射填充本地缓存后调用差异。为了执行该差异,分布式缓存将需要反映对数据库中在任意基础上执行的单个记录的更改,并在客户端调用差异时针对更改进行处理。

首先想到的是使用 List 或 Dictionary 将记录存储在分布式缓存中——获取整个集合,在本地内存中对其进行操作或搜索,然后将整个集合放回缓存中。然而,后来的想法导致了用单独的记录填充缓存的想法,每个记录都以一种方式进行键控,以使它们可以单独从缓存中检索/更新到缓存中。这导致想知道在更新所有数据时哪种方法会更高效。

我们使用的是 Windows Server AppFabric,因此我们可以使用 BulkGet 操作。但是,我不相信有任何批量更新的概念。

关于分布式缓存对象大小是否有普遍的想法?如果我们对所有项目都有更多的请求,我会担心网络带宽,但至少目前,对所有项目的需求应该是相当小的。

是的,我们将测试和分析每种方法,但我想知道是否有任何超出当前考虑范围的内容需要考虑。

4

1 回答 1

3

因此,在我们的场景中,似乎首选整体缓存对象。使用数据中心中的大型管道,大约 30 MB 的序列化产品数据几乎不需要花费多少时间就可以通过网络。使用 aDictionary<TKey, TValue>我们能够快速找到集合中的产品,以便返回或更新单个项目。

由于缓存中有数千个单独的实体,而且都远低于 1 MB,因此批量操作需要的时间太长。太多的开销,网络操作的延迟。

编辑:我们现在正在考虑同时维护实体和实体的整体集合,因为对于整体,检索单个实体似乎成为使用生产数据集的相当昂贵的过程。

于 2011-04-22T18:03:20.933 回答