在 Asp.net Core MVC 中使用 <distributed-cache> 标记帮助程序时如何破坏缓存或获取缓存密钥

How to bust the cache or obtain cache key when using <distributed-cache> Tag helper in Asp.net Core MVC

提问人:SimonGoldstone 提问时间:7/6/2021 更新时间:7/7/2021 访问量:366

问:

标签和 Redis 有问题。<distributed-cache>

我们有一个 Razor 视图,用于显示长时间运行的查询的结果。我们从使用 注入的服务中获取数据。数据很少更新,因此我们将内容包装在具有 long 属性的标记帮助程序中。<partial>@inject<distributed-cache>expires-after

但是,当数据最终更新时(在我们应用程序的另一部分),我们需要从分布式缓存中删除该键,以便强制页面在下次执行时更新。(我们无法预测数据何时会发生变化 - 我们只能响应外部事件。

我们遇到的问题是,尽管具有固定属性,但缓存键似乎无法预测。例如,创建一个键,类似于 Redis 中的行。name<distributed-cache name='_myQuery' vary-by-user='true'>7/za/Bc/ZRn/MsR/hG69TYTx1LEzqBvlyH1OLJgrpk4=

我怎样才能:

  1. 预测/计算 redis 中的缓存键是什么,以便我可以在应用程序的另一部分删除它?;

  2. 强制标签忽略缓存的值一次?我知道我们有这个属性,因为这是行不通的,因为页面不知道何时使缓存失效。<distributed-cache>enabled

asp.net-mvc asp.net-core redis 分布式缓存

评论


答:

0赞 SimonGoldstone 7/7/2021 #1

在深入研究 ASP.NET Core 源代码后,我找到了 CacheTagKey.cs 文件,其中包含 和 方法。这些方法从一堆参数创建密钥,然后 SHA256 对密钥进行哈希处理并返回 base64。GenerateKey()GenerateHaskedKey()

所以看起来我可以用它来预测缓存键并解决问题。