0

我决定实施缓存来提高产品页面的性能。

每个页面都包含大量产品的图像。

我在 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>
}

缓存代码运行良好,但是当传递新的查询字符串参数(更改页面版本)时,浏览器中的结果与声明的兑现时间相同。

如何缓存页面的每个版本?

谢谢

奥列格

4

1 回答 1

0

一个非常简单的方法可能是将您的密钥 ( productID) 转换为字符串并将其附加到您的 cacheItemKey.

所以你可以考虑换行:

var cacheItemKey = "products"; 

读书:

var cacheItemKey = "products" + productID.ToString();

这应该会产生您正在寻找的行为 - 基本上是模仿VaryByParam设置。

附言。请记住,我没有添加任何类型的防御代码,您应该这样做。

希望有帮助。

于 2013-03-21T21:52:50.420 回答