Как кэшировать несколько версий страницы с помощью 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 настроить.

пс. Пожалуйста, имейте в виду, что я не добавил никакого защитного кода, что вы должны сделать.

Надеюсь, это поможет.

Другие вопросы по тегам