petshop输出缓存设置
petshop的web页面上部的ControlHeader是随着用户登陆的状态有关的,故其设置了VaryByCustom属性以来标识用户不同登陆状态的缓存版本。而Category页面由于可能被大量的访问,并且数据量很大,是十分有必要缓存的,但是由于数据的随机性很大,存在不同的版本,比如说是不同类别的Category,甚至不同的分页显示的数据页,在这里采用了VaryByCustom属性以缓存不同版本的页。

我们再看下其具体实现代码:
VaryByCustom,我们可以自定义输出缓存要求的任意文本。除了在OutputCache指令里面申明该属性之外,我们还得在应用程序的 global.asax 文件的代码声明块中,重写 GetVaryByCustomString 方法来为自定义字符串指定输出缓存的行为。

举一列来说:

<%@ OutputCache VaryByParam="none" VaryByCustom="CategoryPageKey" Location="server" Duration="43200" %>

这里的VaryByCustom定义的为CategoryPageKey,那么在global.asax里面我们必须定义CategoryPageKey这个字符创输出缓存的行为,见下面代码。

public override string GetVaryByCustomString(HttpContext context, String arg) {

string cacheKey = "";

switch(arg) {

case "CategoryPageKey":

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["category_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["category_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "SearchPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["search_text"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["search_text"] + context.Request.QueryString["requestedPage"];

}

break;

case "ProductPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["name"] + context.Request.QueryString["product_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["name"] + context.Request.QueryString["product_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "ProductDetailsPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["item_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["item_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "UserID" :

if (Request.IsAuthenticated == true) {

cacheKey = "UserID_In";

}

else {

cacheKey = "UserID_Out";

}

break;

}

return cacheKey;

}

从上面对CategoryPageKey字符创所作的行为来看,当我们的请求页面中含有对特定的category_id的某一分页显示的数据页的请求时,将调用缓存(自然是已经缓存了该页)。

转载于:https://www.cnblogs.com/leonjoon/archive/2006/08/27/487747.html

如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面(二)相关推荐

  1. 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例

    文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...

  2. JSP中的page指令常用的属性

    JSP中指令使用的格式: <%@指令名 属性名="属性值" 属性名="属性值"-%> <%@page pageEncoding="u ...

  3. 淘宝商品详情页视频接口(视频参数,sku属性参数,销量参数等页面上的数据均可以采集,支持高并发请求)

    淘宝商品详情页视频接口(视频参数,sku属性参数,销量参数等页面上的数据均可以采集,支持高并发请求)接口代码教程如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须 ...

  4. 购物车(七)-计算商品总价——计算总价-计算属性 数据缓存api-wx.setStorageSync()方法

    计算商品总价--计算总价-计算属性 & 数据缓存api-wx.setStorageSync()方法 通过计算属性计算商品总价 allPrice() {// 计算购物车所有商品的总价格// 单价 ...

  5. vue渲染时数据对象里面的子对象的属性报错undefined,但页面正常渲染

    vue渲染时数据对象里面的子对象的属性报错undefined,但页面正常渲染. 报如图所示错误 页面中报错的位置 原因是在data中申明了空对象,页面在渲染的时候,数据还没获取到的时候,首先渲染的是初 ...

  6. vue使用,及指令介绍,计算属性/过滤器

    目录 Vue是什么 vue的单页面原理 Vue的使用 指令介绍: v-if和 v-show的区别 v-on 事件绑定: v-bind 绑定属性 处理数组绑定 v-model双向数据绑定 created ...

  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch...

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  9. Python笔记_64_Vue_M-V-VM思想_显示数据_常用指令_操作属性_绑定事件_操作样式_条件渲染指令_列表渲染指令

    文章目录 Vue vue.js的M-V-VM思想 快速使用 显示数据 常用指令 操作属性 绑定事件 操作样式 条件渲染指令 列表渲染指令 Vue vue.js是目前前端web开发最流行的工具库,由尤雨 ...

最新文章

  1. 虚幻4皮肤材质_虚幻周报20200721 | CJ就要开始啦~
  2. 天池四月读书会|数据分析金融量化,6场直播,6位大咖,6个项目实战
  3. LaTeX基础一:安装与基本操作
  4. C# 采用线程重绘图形要点记录
  5. python实现矢量分级渲染_AE 栅格图分级渲染
  6. Which path should be used jdk or jre for JAVA_HOME environment variable?
  7. node.js中ws模块创建服务端和客户端,网页WebSocket客户端
  8. ELK详解(十七)——filebeat输出到Redis和Elasticsearch实战
  9. 如何通过Azure Service Management REST API管理Azure服务
  10. 如何下载朝阳区卫星地图高清版大图
  11. leetcode1-5
  12. word报错“您的组织策略阻止我们为您完成此操作”的解决方法
  13. 淘宝天猫商家运营,宝贝标题如何突出卖点,标题编写方法小技巧
  14. ES 按照每隔几分钟,几小时,几天统计折线图
  15. 关于把war包放在Tomcat的webapps目录下 启动服务 前端访问报404
  16. 字蛛(font-spider)压缩字体
  17. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能
  18. Android:viewpager+ fragment模拟微信首页
  19. 奔弛定理与三角形的五星
  20. IoT产品的10个最佳实践

热门文章

  1. Codeforces Round #190 (Div. 1): E. Ciel and Gondolas(决策单调性DP+wqs二分)
  2. bzoj 3316: JC loves Mkk(二分+单调队列)
  3. bzoj 1096: [ZJOI2007]仓库建设(斜率DP)
  4. bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
  5. bzoj 3040: 最短路(road)(堆优化dijkstra)
  6. C++map关联容器2.0
  7. NYOJ 1272:表达式求值(2016河南省ACM-A)
  8. C语言实现成块数据读写操作 fread() fwrite()
  9. DNS 正向查找与反向查找
  10. Python攻克之路-xml模块