如何解决单个或多个MemoryCache实例
| 默认情况下,MemoryCache带有默认缓存,并且可以创建其他命名的缓存。 隔离不同实例中不同进程的结果的缓存似乎有优势。例如,针对索引的查询结果可以存储在\“ IndexQueryResult \”缓存中,而数据库查询的结果可以存储在\“ DatabaseQueryResult \ ”缓存。这相当人为,但可以解释其原理。 一个缓存导致驱逐的内存压力是否会完全影响其他缓存? .Net管理多个缓存的方式与其管理一个缓存的方式有何不同? 我是在浪费时间考虑多个缓存的想法,还是这样做有真正的价值?解决方法
我无法说出前几个问题,我很想听听这些问题的答案。但是,可以说,到目前为止,我们在产品中使用多个缓存的经验非常丰富。这是我看到的好处:
减少键冲突的机会:我们可以简单地创建特定于给定存储库类型的缓存,而不是想出一种方案来确保没有两个单独的值以相同的键结尾只要该存储库类使用其对象唯一的键,我们就不会发生冲突。
使用缓存逐出可以提高精度:“拥有”特定缓存实例的存储库类型可以订阅系统级事件总线上的某些事件类型,以便它知道何时需要清除缓存的某些部分。如果幸运的话,它可以完全基于已发布事件的参数来确定要清除的条目的键。但是,通常不是这种情况,我们必须清除整个缓存或遍历所有缓存的值,以找出哪些值受已发布事件的影响。如果我们对系统中的所有数据类型使用单个缓存实例,则最终将爬网许多不相关的条目。通过使用单独的缓存,我们可以将搜索限制为该特定存储库负责填充的值。
关于第二点:我们还构建了一个UI,以公开系统中的所有缓存实例,并允许我们通过单击按钮清除其中的任何一个。当我们需要直接对数据库进行更改,并且需要系统无需重新启动服务器就可以获取这些更改时,这非常方便。同样,如果仅使用单个缓存,我们将无法达到如此精确的效果:我们必须清除系统范围内的所有缓存值,而不仅仅是清除与修补数据类型相关联的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。