ASP.net - 通过Query-String缓存(VaryByParam)

时间:2009-07-24 14:40:45

标签: asp.net caching query-string outputcache

在哪些情况下我们应该使用Query-Strings(VaryByParam)来实现ASP.NET中的缓存?

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

2 个答案:

答案 0 :(得分:4)

Products.aspx?productID=12345

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

详细

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

答案 1 :(得分: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是单个产品详细信息屏幕,其中包含产品ID(可以是数据库中的唯一标识符),因为它是单个查询字符串参数。对此的多个请求几乎总是需要返回相同的数据(除非该特定产品的价格或描述或某些其他元素经常变化)。基于“ProductID”查询字符串的缓存(以及它对不同产品的值的变化)将大大减少数据库的负载。确保缓存持续时间太长,将确保在实际后端数据库数据发生变化时,缓存在合理的时间内到期。