为缓存策略和选择器配置表达式
请求时表达式检查请求时事务中的数据,而响应时表达式检查响应时事务中的数据。在缓存策略中,如果表达式与请求或响应中的数据匹配,Citrix ADC设备将执行与该策略关联的操作。在选择器中,请求时表达式用于查找存储在内容组中的匹配响应。
在为集成缓存配置策略和选择器之前,您至少需要知道HTTP请求和响应url中出现的主机名、路径和IP地址。您可能需要知道整个HTTP请求和响应的格式。Live HTTP Headers等程序http://livehttpheaders.mozdev.org/)或HTTPFox
https://addons.mozilla.org/en-US/firefox/addon/6647
可以帮助您研究组织使用的HTTP数据的结构。
下面是一个股票报价程序的HTTP GET请求示例:
GET /quote.dll?page=dynamic&mode=data&mode=stock&symbol=CTXS&page=multi&selected=CTXS&random=0.00792039478975548 HTTP/1.1主机:quotes.mystockquotes.com用户代理:Mozilla/5.0 (Windows;U;Windows NT 5.1;en - us;rv:1.9) Gecko/2008052906 Firefox/3.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept- language: en-us,en;q=0.5 Accept- encoding: gzip,deflate,compress,pack200-gzip Accept- charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: Keep-Alive Referer: http://quotes.mystockquotes.com/quote.dll?mode=stock&symbol=CTXS&page=multi&selected=CTXS Cookie: __qca=1210021679-72161677-10297606
在配置表达式时,需要注意以下限制:
表达式类型 | 限制 |
---|---|
请求 | 不要在策略中配置带有CACHE或NOCACHE动作的请求时表达式。请使用MAY_CACHE或MAY_NOCACHE。 |
响应 | 仅在缓存策略中配置响应时间表达式。选择器只能使用请求时表达式,不要在带有INVAL动作的策略中配置响应时表达式。注意:不要在带有CACHE动作和参数化内容组的策略中配置响应时表达式。使用MAY_CACHE动作。 |
注意:有关高级表达式的全面讨论,请参见策略与表达.
表达式语法
以下是语法的基本组件:
- 用句点(.)分隔关键字,如下所示:
http.req.url
- 将字符串值括在圆括号和引号中,如下所示:
http.req.url.query.contains(“这”)
- 从命令行配置表达式时,必须转义内部引号(分隔表达式中的值的引号,而不是分隔表达式的引号)。一种方法是使用斜杠,如下所示:
\ " abc \ "
选择器表达式按出现顺序求值,选择器定义中的多个表达式由逻辑and连接。与选择器表达式不同,您可以在策略规则的高级表达式中指定布尔运算符并修改优先级。
在缓存策略或选择器中配置表达式
注意:策略表达式的语法与选择器表达式不同。有关高级表达式的全面讨论,请参见“策略和表达式”。
使用命令行接口配置策略表达式
- 按照“全局绑定集成缓存策略”中描述的那样启动策略定义。
- 若要配置策略规则,请使用引号分隔整个规则,并使用转义引号分隔规则中的字符串值。
举例如下:
“http.req.url.contains(“jpg”)”
-
要添加布尔值,请插入&&, ,或!操作符。
以下是一些例子:
“http.req.url.contains(\“jpg \”)| | http.req.url.contains(\“jpeg \”)”
“http.req.url.query.contains(\“IssuePage \”)”
“http.req.header(\“主机\”)包含(\“my.company.com \”)& & http.req.method.eq(\“\”)& & http.req.url.query.contains(\“v = 7 \”)”
- 为化合物的组成部分设定一个评价顺序
“http.req.url.contains(\“jpg \”)| | (http.req.url.contains(\“jpeg \”)& & http.req.method.eq(\“\”))”
使用命令行接口配置选择器表达式:
- 按照“关于内容组”中描述的那样启动选择器定义。
- 若要配置选择器表达式,请使用引号分隔整个规则,并使用转义引号分隔规则内的字符串值。
举例如下:
“http.req.url.contains(\“jpg \”)”
-
不能添加布尔值,插入&&, ,或!操作符。输入用引号分隔的每个表达式元素。定义中的多个表达式被视为由逻辑and连接的复合表达式。
以下是一些例子:
“http.req.url.query.value(\“ProductId \”)”“http.req.url.query.value(\“BatchNum \”)”“http.req.url.query.value(\“depotLocation \”)”<!——NeedCopy >
使用GUI配置策略或选择器表达式
- 启动策略或选择器定义,如“使用配置实用工具配置缓存或失效策略”或“使用配置实用工具配置选择器”中所述。
- 在表达式字段,您可以通过单击“切换到经典语法”手动键入高级策略或使用表达式编辑器.
-
若要在复合表达式的两个部分之间插入运算符,请单击Operators按钮并选择运算符类型。下面是一个配置表达式的示例,其中包含一个布尔或(由双竖条表示, ): - 点击常用表达下拉列表中插入常用表达式。
- 要测试表达式,请单击评估.在表达式求值程序对话框,选择匹配表达式的流类型。在data字段中,粘贴希望使用表达式解析的HTTP请求或响应,然后单击评估.
显示缓存对象和缓存统计信息
您可以查看特定的缓存对象,还可以查看关于缓存请求、未命中和内存使用情况的汇总统计信息。这些统计信息提供了有关从缓存中处理的数据量、哪些项对性能的好处最大以及可以调优哪些内容以提高缓存性能的信息。
本节包括以下细节:
- 查看缓存对象
- 查找特定的缓存响应
- 查看Cache统计信息
查看缓存对象
启用缓存后,您可以查看缓存对象的详细信息。例如,可查看的信息如下:
- 响应大小和报头大小
- 状态码
- 内容组织
ETag
、Last-Modified和Cache-Control头- 请求的url
- 点击参数
- 目的IP地址
- 请求和响应时间
使用命令行界面查看缓存对象的列表
在命令提示符下,输入:
显示缓存对象
属性 | 描述 |
---|---|
响应大小(字节) | 响应头和正文的大小。 |
响应头大小(字节) | 响应头部分的大小。 |
响应状态码 | 随响应一起发送的状态代码。 |
ETag | 在响应中插入的ETag头。通常,此报头指示最近是否更改了响应。 |
last - modified | 在响应中插入Last-Modified报头。此报头指示最后更改响应的日期。 |
cache - control | 在响应中插入的Cache-Control头。 |
日期 | Date报头,指示发送响应的时间。 |
Contentgroup | 存储响应的内容组。 |
复杂的匹配 | 如果该对象是基于参数化值缓存的,则该字段值为YES。 |
宿主 | 请求此响应的URL中指定的主机。 |
主机端口 | 在请求此响应的URL中指定的主机的监听端口 |
URL | 为存储的响应发出的URL。 |
目的地IP | 从中获取此响应的服务器的IP地址。 |
目的港 | 目标服务器的监听端口。 |
点击参数 | 如果存储响应的内容组使用hit参数,则在此字段中列出它们。 |
点击选择器 | 如果此内容组使用命中选择器,则在此字段中列出。 |
Inval选择器 | 如果此内容组使用无效选择器,则会在此字段中列出。 |
选择器表达式 | 如果此内容组使用选择器,则此字段显示定义选择规则的表达式。 |
请求时间 | 请求发出后的时间(以毫秒为单位)。 |
响应时间 | 从缓存开始接收响应的时间(以毫秒为单位)。 |
年龄 | 对象在缓存中的时间。 |
到期 | 对象被标记为过期的时间。 |
刷新 | 响应在过期后是否被刷新。 |
预取 | 如果已为此内容组配置了预取,则在到期前从原点读取对象的时间。预取不适用于负对象(例如,404 " object not found "响应)。 |
当前的读者 | 大约是当前正在服务的请求数。当下载带有Content-Length头对象的响应时,当前的misses值和当前readers值通常都是1。下载分块响应对象时,当前misses值通常为1,但当前readers值通常为0,因为提供给客户机的分块响应不是来自集成的缓存缓冲区。 |
当前的想念 | 导致缓存丢失和从源服务器读取的当前请求数。该值通常为0或1。如果对内容组启用了“每次轮询次数”,则该次数可以大于1。 |
支安打 | 此对象的缓存命中数。 |
错过 | 此对象缓存失败的次数 |
压缩格式 | 应用于此对象的压缩类型。压缩格式包括gzip、deflate、compress和pack200-gzip。 |
响应的HTTP版本 | 用于发送响应的HTTP版本。 |
响应中存在弱etag | 如果实体的位发生变化,强etag标头也会发生变化。强标头基于对象的八字节值。如果实体的含义发生变化,弱etag标头也会发生变化。弱etag值基于语义标识。弱标签值以“w”开头。 |
阴性标记细胞 | 标记对象是可缓存的,但它还不满足缓存的所有条件。例如,对象可能超过内容组的最大响应大小。为这种类型的对象创建一个标记单元格。下一次用户发送此对象的请求时,将处理缓存遗漏。 |
创建原因标记 | 创建标记单元格的原因(例如,“等待minhit”,“内容长度的响应数据不在组大小限制中”)。 |
每次自动轮询 | 如果集成缓存接收到一个已经过期的200 OK响应,并带有验证器(Last-Modified或ETag响应头),它将存储该响应并将其标记为Auto-PET(每次自动轮询)。 |
Citrix ADC Etag插入响应 | 由Citrix ADC设备生成的ETag头的变体。如果Citrix ADC在响应中插入Etag,则显示YES值。 |
缓存中有完整的响应 | 指示这是否是一个完整的响应。 |
DNS验证目的IP | 指示存储对象时是否执行DNS解析。 |
通过缓存转发代理存储的对象 | 指示此响应是否由于在集成缓存中配置的正向代理而存储。 |
对象是一个Delta基文件 | 一个被压缩的响应。 |
等待minhits | 指示此内容组在缓存响应之前是否需要命中最少数量的源服务器。 |
Minhit计数 | 如果此内容组在缓存对象之前需要最少数量的源服务器请求,则此字段将显示到目前为止接收到的请求数量的计数。 |
HTTP请求方式 | 获取此对象的请求中使用的方法GET或POST。 |
按策略存储 | 导致存储此对象的缓存策略的名称。“NOT AVAILABLE”表示该策略已被禁用或删除。NONE值表示该对象不匹配可见策略,而是根据缓存的内部标准存储。 |
存在应用程序防火墙元数据 | 当应用程序防火墙和集成缓存同时启用时,使用此参数。应用程序防火墙分析响应页面的内容,存储其元数据(例如,页面中包含的url和表单),并将元数据和响应一起导出到缓存。缓存存储页面和元数据,当缓存为页面提供服务时,它将元数据发送回请求的会话。 |
HTTP调出对象、名称、类型、响应 | 这些单元格指示该数据是否作为HTTP Callout表达式的结果存储,并提供关于Callout和相应响应的各个方面的信息。有关HTTP调出的更多信息,请参见“HTTP调出”。 |
使用GUI查看缓存对象
导航到优化>集成缓存>缓存对象.您可以查看所有缓存的对象,并根据需要对它们进行排序。
查找特定的缓存响应
您可以根据搜索条件在缓存中查找单个项。有不同的方法来查找缓存项,这取决于包含数据的内容组是否使用命中和无效选择器,如下所示:
- 如果内容组使用选择器,则只能使用缓存项的Locator ID进行搜索。
- 如果内容组不使用选择器,则使用URL、主机、内容组名称等条件进行搜索。
在搜索缓存的响应时,可以通过URL和主机定位某些项。如果响应位于使用选择器的内容组中,则只能通过使用Locator编号(例如0x00000000ad7af00000050)找到它。若要保存Locator号码供以后使用,请右键单击该条目并选择复制.有关选择器的详细信息,请参见“配置选择器和基本内容组.”
使用命令行界面在没有选择器的内容组中显示缓存的响应
在命令提示符下,输入:
显示缓存对象[-locator
使用命令行界面在具有选择器的内容组中显示缓存的响应
在命令提示符下,输入:
show cache object -locator
使用配置实用程序在没有选择器的内容组中显示缓存的响应
导航到优化>集成缓存>缓存对象,单击“查询”,设置查询条件,即可查看所需的缓存响应。
如果尚未配置任何内容组,则所有对象都在Default组中。
查看cache统计信息
下表总结了可以查看的详细缓存统计信息。
计数器 | 描述 |
---|---|
支安打 | 在集成缓存中找到并从集成缓存中提供的响应。包括静态对象,如图像文件、状态码为200、203、300、301、302、304、307、403、404、410的页面,以及与用户定义的策略匹配的带有CACHE动作的响应。 |
错过 | 拦截HTTP请求,最终从源服务器获取响应。 |
请求 | 缓存请求总数加上缓存丢失总数。 |
非304的点击率 | 如果用户多次请求一个项目,并且缓存中的项目自Citrix ADC设备上次提供该项目以来没有变化,则Citrix ADC设备将提供304响应,而不是缓存的对象。 |
该统计数据表示Citrix ADC设备从缓存中处理了多少项,不包括304个响应。 | |
304的点击率 | Citrix ADC设备从缓存中提供的304个(对象未修改)响应的数量。 |
304命中率(%) | Citrix ADC设备提供的304个响应相对于其他响应的百分比。 |
命中率(%) | Citrix ADC设备从缓存提供的响应(缓存请求)相对于不能从缓存提供的响应的百分比。 |
节省的起始带宽(%) | Citrix ADC设备由于从缓存提供响应而保存在源服务器上的处理能力的估计。 |
Citrix ADC提供的字节 | Citrix ADC设备从源服务器和缓存提供的总字节数。 |
缓存提供的字节数 | Citrix ADC设备从缓存提供的总字节数。 |
字节命中率(%) | Citrix ADC设备从缓存中提供的数据的百分比,相对于所有服务响应中的所有数据。 |
从缓存中压缩字节 | Citrix ADC设备以压缩形式提供的数据量,以字节为单位。 |
耐贮藏的想念 | 如果Citrix ADC设备在缓存中没有找到请求的对象,它将从源服务器获取该对象。这就是所谓的缓存缺失。可存储的缓存缺失可以存储在缓存中。 |
Non-storable错过 | 不可存储的缓存缺失不能存储在缓存中。 |
错过 | 所有缓存丢失。 |
重新生效 | cache - control报头中的Max-Age设置以秒数为单位确定,在将内容提供给用户之前,中间缓存必须用集成缓存重新验证内容。 |
有关更多信息,请参见“插入缓存控制头”。 | |
成功的重新生效 | 已执行的重新验证的数目。 |
有关更多信息,请参见“插入缓存控制头”。 | |
转换为条件req | 对缓存的PET对象的用户代理请求总是转换为条件请求并发送到源服务器。 |
有关更多信息,请参见“每次接收请求时轮询源服务器”。 | |
可储存缺漏率(%) | 可存储缓存丢失与不可存储缓存丢失的百分比。 |
成功回采比(%) | 成功的重新验证占所有重新验证尝试的百分比。 |
有关更多信息,请参见“插入缓存控制头”。 | |
在最后一个字节到期 | 缓存内容在接收到最后一个主体字节后立即过期的次数。仅适用于积极响应,如表“缓存命中和未命中”所述。 |
有关更多信息,请参见“性能优化示例”。 | |
Flashcache 错过 |
如果启用了Flash Cache,缓存只允许一个请求到达服务器,从而消除了Flash crowd。该统计数据表示缓存失败的Flash缓存请求的数量。 |
有关更多信息,请参见“将请求排队到缓存”。 | |
Flashcache支安打 | 缓存命中的Flash Cache请求数。 |
有关更多信息,请参见“将请求排队到缓存”。 | |
参数化入侵请求 | 与具有失效(INVAL)操作的策略相匹配的请求,以及使用失效选择器或参数有选择地使组中的缓存对象过期的内容组。 |
完全侵权请求 | 匹配invalGroups参数配置的无效策略并使一个或多个内容组过期的请求。 |
Inval请求 | 匹配无效策略并导致特定缓存响应或整个内容组过期的请求。 |
参数化的请求 | 使用带有参数化内容组的策略处理的缓存请求数。 |
参数化非304命中 | 使用带有参数化内容组的策略处理的缓存请求数,其中找到了完整的缓存响应,并且响应不是304(对象未更新)响应。 |
参数化304次命中 | 使用带有参数化内容组的策略处理的缓存请求数,其中找到了缓存对象,并且对象是304(对象未更新)响应。 |
参数化命中总数 | 使用带有参数化内容组的策略处理的缓存请求数,缓存对象就在其中。 |
参数化304命中率(%) | 使用参数化策略找到的304个(未更新的对象)响应相对于所有缓存命中的百分比。 |
每次请求时进行轮询 | 如果启用了“每次轮询”,则Citrix ADC设备在为存储对象提供服务之前总是咨询源服务器。 |
有关更多信息,请参见“每次接收请求时轮询源服务器”。 | |
每次投票 | 使用Poll Every Time方法发现缓存命中的次数。 |
有关更多信息,请参见“每次接收请求时轮询源服务器”。 | |
问卷每次命中率(%) | 使用Poll Every Time方法的缓存命中百分比,相对于使用Poll Every Time对缓存对象的所有搜索。有关更多信息,请参见“每次接收请求时轮询源服务器”。 |
最大内存(KB) | Citrix ADC设备中分配给缓存的最大内存量。有关更多信息,请参见“为缓存配置全局属性”。 |
最大内存活动值(KB) | 将内存分配给缓存后将设置的最大内存量(活动值)。有关更多信息,请参阅“如何为各种场景配置Citrix ADC设备的集成缓存功能”。 |
已用内存(KB) | 实际使用的内存量。 |
内存分配失败 | 试图利用内存在缓存中存储响应而失败的次数。 |
迄今为止最大规模的反应 | 在缓存或源服务器中找到并发送到客户端的最大响应(以字节计)。 |
缓存对象 | 缓存中的对象数,包括尚未完全下载的响应和已过期但尚未刷新的响应。 |
标记的对象 | 当响应超过内容组的最大或最小响应大小,或者尚未收到内容组的最小命中数时,将创建标记对象。 |
正在供应的食物 | 从缓存中提供的命中数。 |
失误被处理 | 从源服务器获取的响应,存储在缓存中,然后提供服务。应该接近可储存的遗漏数量。不包括不可存储的错误。 |
使用命令行界面查看概要缓存统计信息:
在命令提示符下,输入:
stat缓存
通过命令行界面查看指定的缓存统计信息:
在命令提示符下,输入:
统计缓存
>属性缓存细节集成缓存统计数据-细节集成缓存统计数据总结率(/ s)总打0 0失误0 0请求0 0命中率(%)——0起源带宽(%)保存缓存的对象——0标记对象——0利率(/ s)总请求0 0点击统计率(/ s)总非304支安打Sql达到0 0 0 304的点击量0 0 0 0 0 304支安打命中率(%)——0命中率(%)起源带宽(%)——保存0字节数据率(/ s)总字节由Citrix ADC 648 55379204字节由0 0字节缓存命中率(%),从缓存压缩字节0 0小姐统计率(/ s)总存储了0 0 Non-storable错过0 0 0 0重新生效0 0穆斯林成功重新生效0 0转换条件要求0 0耐贮藏的小姐比(%)——成功的瑞威尔比率(%)——0 Flashcache统计率(/ s)总到期最后一个字节0 0 0 0 Flashcache Flashcache未击中0 0失效统计率(/ s)总参数化inval请求0 0全inval请求0 0 0 0 Inval请求参数化缓存统计数据率(/ s)总参数化请求0 0参数化的非304的点击量0 0参数化304支安打总参数化达到0 0 0 0参数化304命中率(%)——0每次民意调查(PET)统计率(/ s)总调查每次请求调查每次打0 0调查每一次命中率(%)——0内存使用统计总最大内存(KB) 0最大内存活跃值(KB) 0利用内存(KB) 0 0内存分配失败到目前为止最大的响应(B) 0缓存对象0标记对象0正在服务的命中0正在处理的未命中0完成
使用GUI界面查看缓存统计信息汇总
- 单击指示板标签在页面顶部。
- 向下滚动到集成缓存窗口的部分。
- 要查看详细的统计数据,请单击表格底部的More…链接。
通过图形界面查看cache的具体统计信息
- 单击报告标签在页面顶部。
- 在“内置报表”下展开集成缓存,然后单击具有所需统计数据的报表。
- 单击,将报表另存为模板另存为并为报告命名。已保存的报告显示在自定义报告。