Как очистить кеш для хелпера тегов распределенного кеша в .netcore - PullRequest
0 голосов
/ 09 марта 2020

У меня есть веб-страница бритвы .netcore, которая использует помощник тегов распределенного кэша для кэширования вывода html различных компонентов представления, которые генерируются страницей. Сам кеш использует redis. Содержимое страницы обновляется с помощью cms, и мне нужно иметь возможность обновить sh кэшированное содержимое на основе параметра строки запроса - ie? RefreshCache = 1

Мой тег в настоящее время создается следующим образом this:

<distributed-cache name="@Model.CacheName" 
                   expires-after="@Model.CacheExpiry"    
                   enabled="@(!Model.CacheRefresh)"  
                   vary-by="@Model.PageID,@Model.LanguageID">

значение Model.CacheRefre sh является логическим значением, установленным строкой запроса. Model.CacheExpiry - это временной интервал, равный 1 часу. PageID и LanguageID используются для отображения правильного содержимого на правильном языке из CMS.

Проблема заключается в том, что если установить флажок enable в значение false, будет отображаться новое содержимое, но при удалении CacheRefre sh querystring, он вернется к ранее кэшированному контенту. Если вы установите срок действия expires-after на 1 миллисекунду (вы не можете использовать Timespan.Zero здесь), он не будет сбрасывать срок действия кэша, потому что вы должны ждать истечения срока действия предыдущего кэша в течение одного часа. Точно так же, если вы попытаетесь использовать expires-on, он будет использовать значение предыдущей записи, прежде чем он будет refre sh.

Единственное, что я могу придумать, это вручную удалить ключ из кэша redis. , однако я не знаю точно, как генерируется кеш-ключ для этого помощника по тегам.

Так что мне нужен метод, который выглядит примерно так:

private string GetCacheKey(){
    string key = CacheName + PageID+ "," + LanguageID;
    return key;
}

Я думаю, что исходный код здесь могли бы дать некоторые указатели? https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.TagHelpers/src/Cache/CacheTagKey.cs

...