C# 最佳实践缓存:单片缓存与细粒度缓存数据

C# 最佳实践缓存:单片缓存与细粒度缓存数据,c#,.net,caching,appfabric,distributed-caching,C#,.net,Caching,Appfabric,Distributed Caching,在分布式缓存场景中,通常建议使用或避免存储在缓存中的单片对象吗 我正在使用一个由EAV模式支持的服务,因此我们将缓存放在适当的位置,以最大限度地减少EAV在从数据库检索所有主记录和相应属性集合时造成的性能缺陷。我们将在服务启动时初始化缓存 我们并没有特别频繁地调用所有产品——客户机在首次使用对象映射填充其本地缓存后调用差异。为了执行该差异,分布式缓存将需要反映对数据库中单个记录的任意更改,并在客户端调用差异时对更改进行处理 第一个想法是使用列表或字典将记录存储在分布式缓存中——获取整个集合,在内

在分布式缓存场景中,通常建议使用或避免存储在缓存中的单片对象吗

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

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

第一个想法是使用列表或字典将记录存储在分布式缓存中——获取整个集合,在内存中本地操作或搜索它,然后将整个集合放回缓存中。然而,后来的想法导致了用单个记录填充缓存的想法,每个记录都以某种方式键入,使它们可以从缓存中单独检索/更新。这导致人们想知道在更新所有数据时哪种方法更有效

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

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


是的,我们将测试和配置每种方法,但是我想知道在当前的思考范围之外是否有其他的东西要考虑。

< P>所以,在我们的场景中,似乎会出现单片缓存对象。由于数据中心中有大量的管道,大约30 MB的序列化产品数据几乎不需要任何时间就可以通过网络传输。使用
字典
我们可以快速查找收藏中的产品,以便返回或更新单个项目

由于缓存中有数千个单独的实体,所有这些实体的大小都在1MB以下,因此批量操作的时间太长。开销过大,网络操作延迟


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

最近的.Net Rocks播客中有一些关于这个主题的讨论,嘉宾是Udi Dahan。播客是关于CQR的,他们讨论了该模式的关键优势之一是如何实现更好的缓存。可能会给你一些想法。。。