首页 > 解决方案 > 使用 IMemoryCache 单例每个存储库?

问题描述

我正在将 IMemoryCache 集成到一个项目中,并且我将竭尽全力确保每个存储库或提供者中的密钥不会发生冲突(即提出一个密钥空间)。但后来我突然想到,为什么不为每个存储库/提供者提供他们自己的 IMemoryCache 单例实例——即命名单例。这将保证密钥永远不会发生冲突,并且一个存储库永远无法访问另一个存储库的内部状态。我的原始方面还说这可能会提高性能,因为现在每个存储库都不会竞争 IMemoryCache 的内部锁。

但我不会假装理解 IMemoryCache 如何管理它的所有逻辑。也许拥有一个应用程序范围的单例实例很重要,这样它才能以更高性能的方式管理缓存条目的生命周期。

基本上,我从未见过有人将单例存储库模式与 IMemoryCache 一起使用,因此我正在征求对这种方法的反馈。

谢谢

标签: c#caching.net-core

解决方案


MemoryCache.Default我相信原始的 .NET Full Framework MemoryCache 旨在通过该属性用作单例实例。这是因为它在一个叫做MemoryPressure. 关于如何MemoryPressure实际计算这种魔法的文档完全为零。毫无疑问,它在多个实例上可能不太聪明。

似乎现在的偏好是对缓存设置大小限制。dotnet 核心版本中MemoryCache.Default不再存在静态属性,并且似乎没有警告表明多实例是一种反模式。此外,似乎MemoryCacheOptions.CompactOnMemoryPressure现在已弃用,并且首选是提供固定大小。我看不出使用多个实例有任何问题。


推荐阅读