Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单个与多个MemoryCache实例_C#_.net_Caching - Fatal编程技术网

C# 单个与多个MemoryCache实例

C# 单个与多个MemoryCache实例,c#,.net,caching,C#,.net,Caching,默认情况下,MemoryCache附带默认缓存,并且可以创建其他命名缓存 在不同的实例中隔离不同进程的结果缓存似乎有好处,例如,针对索引的查询结果可以缓存在“IndexQueryResult”缓存中,而数据库查询结果可以缓存在“DatabaseQueryResult”缓存中。这有点做作,但解释了原理 导致逐出的一个缓存上的内存压力是否会影响其他缓存?与.Net管理一个缓存的方式相比,它管理多个缓存的方式有什么不同吗 我是在浪费时间考虑多个缓存的想法,还是这样做真的有价值?我无法回答最初的几个问题

默认情况下,MemoryCache附带默认缓存,并且可以创建其他命名缓存

在不同的实例中隔离不同进程的结果缓存似乎有好处,例如,针对索引的查询结果可以缓存在“IndexQueryResult”缓存中,而数据库查询结果可以缓存在“DatabaseQueryResult”缓存中。这有点做作,但解释了原理

导致逐出的一个缓存上的内存压力是否会影响其他缓存?与.Net管理一个缓存的方式相比,它管理多个缓存的方式有什么不同吗


我是在浪费时间考虑多个缓存的想法,还是这样做真的有价值?

我无法回答最初的几个问题,我很想听到这些问题的答案。然而,我可以说,到目前为止,我们在产品中使用多个缓存已经有了很好的体验。以下是我看到的好处:

  • 减少了密钥冲突的可能性:我们不需要提出某种方案来确保没有两个单独的值最终使用同一个密钥,而只需创建特定于给定存储库类型的缓存,并且知道只要该存储库类使用其对象特有的密钥,就不会发生冲突
  • 缓存逐出的精确度更高:“拥有”特定缓存实例的存储库类型可以在系统范围的事件总线上订阅某些事件类型,以便它知道何时需要清除缓存的某些部分。如果幸运的话,它可以完全根据已发布事件的参数来确定要清除的条目的键。但是,通常情况并非如此,我们必须清除整个缓存,或者遍历所有缓存的值,以确定哪些值受已发布事件的影响。如果我们对系统中的所有数据类型使用一个缓存实例,那么我们最终将通过大量不相关的条目进行爬行。通过使用单独的缓存,我们可以将搜索限制为该特定存储库负责填充的值

关于第二点:我们还构建了一个UI来公开系统中的所有缓存实例,并允许我们通过单击按钮来清除其中的任何一个。当我们需要直接对数据库进行更改,并且需要系统在无需重新启动服务器的情况下获取这些更改时,这就很方便了。同样,如果我们只使用一个缓存,我们就不能做到几乎同样精确:我们必须在系统范围内清除所有缓存值,而不仅仅是与我们修补过的数据类型相关联的值。

您能否展示一些代码示例,解释上述使用优于
单个实例的好处。在这方面,它将变得更有用、更受欢迎。@PKKG:不,我不认为使用代码示例可以更好地解释这些好处。如果英语很难理解,我很抱歉,但我不认为代码示例会让事情变得更清楚。同样相关的是