4

什么情况下应该使用Query-Strings (VaryByParam)来实现ASP.NET中的缓存?

任何人都可以举一个网络应用程序的真实情况示例吗?

4

2 回答 2

4
Products.aspx?productID=12345

显然,您不希望 Products.aspx 的输出缓存包含请求的第一个产品的数据。

详细地

如果我点击Products.aspx?productID=12345页面将为我处理,查找产品 12345 的信息,并缓存结果。然后你点击Products.aspx?productID=54321,页面不会为你处理,但 products.aspx 将从输出缓存中检索,你会看到 12345 的信息。不好。VaryByParam 解决了这个问题。

于 2009-07-24T14:59:37.130 回答
2

最经典的例子可能是: 产品目录

它可能具有如下 URL 结构:

http://www.myshop.com/Catalog/ViewAllProducts.aspx

http://www.myshop.com/Catalog/ViewAllProducts.aspx?PageNum=123&PageSize=50

http://www.myshop.com/Catalog/ViewProduct.aspx?ProductID=12345

第一个 URL 是所有产品的完整列表。这里没有查询字符串,但第二个 URL 是同一页面,但有分页。页码 (PageNum) 和每页的项目数 (PageSize) 都是查询字符串,因此假设用户无法重新排序产品列表,两个不同的用户请求:

http://www.myshop.com/Catalog/ViewAllProducts.aspx?PageNum=123&PageSize=50

URL 将获得相同的信息。第一个请求可以缓存此数据,以便稍后的第二个请求不需要返回数据库来获取产品项目(以及与它们相关的详细信息:价格、描述等)以显示它们.

第三个 URL 是单个产品详细信息屏幕,其中产品 ID(可能是数据库中的唯一标识符)作为它的单个查询字符串参数。对此的多个请求几乎总是需要返回相同的数据(除非该特定产品的价格或描述或某些其他元素经常更改)。基于“ProductID”查询字符串的缓存(以及不同产品的值变化)将大大减少数据库的负载。确保缓存持续时间不会太长将确保缓存在实际后端数据库数据发生更改时在合理的时间内过期。

于 2009-07-24T15:06:23.170 回答