【发布时间】:2018-06-12 17:03:19
【问题描述】:
IDistributedCache 作为标准 API 提供,用于从 ASP.NET 应用程序中访问分布式缓存。提供的 API 非常简单,基本上将缓存呈现为键值对的容器,DistributedCacheEntryOptions 提供每个条目的到期选项。
现在假设在一个应用程序中有许多不同类型的数据需要缓存,我们可能希望对其中的一些进行逻辑分组。也许我们希望对某些类型的数据进行分组,以便我们可以例如选择从缓存中全部刷新而不影响其他类型的数据,或者我们希望能够将某些类型的数据放在具有高可用性的不同缓存集群中,或者更多资源以获得更好的性能等。
鉴于此,我倾向于拥有一个包含多个 IDistributedCache 实例的包含对象,每个实例用于一个逻辑分组。鉴于这似乎是一个常见的要求,我想知道是否有一些标准的方法可以实现这种模式。或者建议将所有内容放入一个带有复合键(例如 groupName-key)的缓存中,尽管我不希望这样做,因为我认为这会限制缓存层的灵活性。
顺便说一句,我注意到 NCache API 提供了为每个缓存条目选择分配 groupName 和 subGroupName 的能力,我认为这正是我想要的。但是,我更愿意针对 IDistributedCache(或类似的)进行编码,以允许插入式替代缓存实现。
也许另一种选择是创建我自己的接口来提供抽象,但我无法选择使用预先构建的现成 IDistributedCache 实现(例如来自 NCache 和 Redis)。
【问题讨论】:
-
"...建议将所有内容放入一个带有复合键(例如 groupName-key)的缓存中,尽管我不希望这样做,因为我认为这会限制缓存层。”这似乎很合理。为什么会限制缓存的灵活性?
-
在
IDistributedCache上创建扩展方法以接受额外的密钥分组数据可能更简单。就个人而言,我通常创建依赖于单例缓存的服务,每个服务处理特定数据的缓存并为键添加前缀,例如UserCache将有一个密钥前缀USER_。如果您的服务不需要 DI,这可以通过扩展方法轻松实现。
标签: caching asp.net-core