我决定实施缓存以提高产品页面的性能。
每个页面都包含大量产品图片。
我在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>
}
缓存代码运行良好,但在传递新查询字符串参数(更改页面版本)时,浏览器中的结果与声明的兑现时间相同。
如何缓存每个版本的页面?
由于
奥列格
答案 0 :(得分:0)
一种非常简单的方法可能是将您的密钥(productID
)转换为字符串,然后将其附加到 cacheItemKey
的名称。
因此,您可以考虑更改该行:
var cacheItemKey = "products";
阅读:
var cacheItemKey = "products" + productID.ToString();
这应该会产生您正在寻找的行为 - 基本上模仿VaryByParam
设置。
PS。请记住,我没有添加任何类型的防御性代码,你应该这样做。
希望有所帮助。