Как кэшировать несколько версий страницы с помощью Razor Dynamic Query & WebCache
Я решил внедрить кэширование для повышения производительности страниц продукта.
Каждая страница содержит большое количество изображений товара.
Я создал следующий код в представлении Razor.
@{
var productID = UrlData[0].AsInt();
var cacheItemKey = "products";
var cacheHit = true;
var data = WebCache.Get(cacheItemKey);
var db = Database.Open("adldb");
if (data == null) {
cacheHit = false;
}
if (cacheHit == false) {
data = db.Query("SELECT * FROM Products WHERE ProductID = @0", productID).ToList();
WebCache.Set(cacheItemKey, data, 1, false);
}
}
Я использую данные со следующим кодом:
@foreach (dynamic p in data)
{
<a href="~/Products/View/@p.ProductID"
<img src="~/Thumbnail/@p.ProductID"></a>
}
Кэширующий код работает хорошо, но при передаче нового параметра строки запроса (изменение версии страницы) результат в браузере совпадает с заявленным временем кэширования.
Как сделать кеширование каждой версии страницы?
Спасибо
Олег
1 ответ
Очень простым подходом может быть преобразование вашего ключа (productID
) к строке и добавьте ее к имени вашего cacheItemKey
,
Так что вы можете рассмотреть вопрос об изменении строки:
var cacheItemKey = "products";
читать:
var cacheItemKey = "products" + productID.ToString();
Это должно произвести поведение, которое вы ищете - в основном имитируя VaryByParam
настроить.
пс. Пожалуйста, имейте в виду, что я не добавил никакого защитного кода, что вы должны сделать.
Надеюсь, это поможет.