c# - 使用 IMemoryCache 单例每个存储库?
问题描述
我正在将 IMemoryCache 集成到一个项目中,并且我将竭尽全力确保每个存储库或提供者中的密钥不会发生冲突(即提出一个密钥空间)。但后来我突然想到,为什么不为每个存储库/提供者提供他们自己的 IMemoryCache 单例实例——即命名单例。这将保证密钥永远不会发生冲突,并且一个存储库永远无法访问另一个存储库的内部状态。我的原始方面还说这可能会提高性能,因为现在每个存储库都不会竞争 IMemoryCache 的内部锁。
但我不会假装理解 IMemoryCache 如何管理它的所有逻辑。也许拥有一个应用程序范围的单例实例很重要,这样它才能以更高性能的方式管理缓存条目的生命周期。
基本上,我从未见过有人将单例存储库模式与 IMemoryCache 一起使用,因此我正在征求对这种方法的反馈。
谢谢
解决方案
MemoryCache.Default
我相信原始的 .NET Full Framework MemoryCache 旨在通过该属性用作单例实例。这是因为它在一个叫做MemoryPressure
. 关于如何MemoryPressure
实际计算这种魔法的文档完全为零。毫无疑问,它在多个实例上可能不太聪明。
似乎现在的偏好是对缓存设置大小限制。dotnet 核心版本中MemoryCache.Default
不再存在静态属性,并且似乎没有警告表明多实例是一种反模式。此外,似乎MemoryCacheOptions.CompactOnMemoryPressure
现在已弃用,并且首选是提供固定大小。我看不出使用多个实例有任何问题。
推荐阅读
- java - 如何检查一个数字是否有小数位到千分位或更多?
- blockchain - 是否可以以 0 交易费用发行代币?
- java - 如何将日志写入 postgresql 数据库
- python - driver.page_source 未定义
- docker - 无法在容器之间工作的 Windows Server 2019 入口网络上获取 Docker Swarm
- karate - 有没有办法将有效负载内的 json 数组值用作可选字段?空手道 DSL
- ios13 - 从 iOS 13.6.1 升级到 iOS 14 时应用行为发生变化
- django - 在不复制模型/字段定义的情况下重命名 ModelSerializer 字段的 DRY 方法?
- javascript - javascript对象上的for循环
- c# - 使用 ASP .Net core 3.1 Web 服务运行 docker 容器时出现运行时错误