Citrix ADC

为缓存策略和选择器配置表达式

请求时间表达式检查请求时事务中的数据,响应时间表达式检查响应时事务中的数据。在缓存策略中,如果表达式与请求或响应中的数据匹配,Citrix ADC 设备将执行与策略关联的操作。在选择器中,请求时间表达式用于查找存储在内容组中的匹配响应。

在为集成缓存配置策略和选择器之前,您至少需要了解 HTTP 请求和响应 URL 中显示的主机名、路径和 IP 地址。您可能需要知道整个 HTTP 请求和响应的格式。实时 HTTP 头等程序http://livehttpheaders.mozdev.org/) or 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

Host: quotes.mystockquotes.com

User-Agent: 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

配置表达式时,请注意以下限制: |表达式类型|限制| |— |— | |请求|请勿在具有缓存或 NOCACHE 操作的策略中配置请求时间表达式。改为使用 MAY_CACHE 或 MAY_NOCACHE。| |反应|仅在缓存策略中配置响应时间表达式。选择器只能使用请求时表达式,不要在具有 INVAL 操作的策略中配置响应时表达式。注意:不要在具有 CACHE 操作和参数化内容组的策略中配置响应时间表达式。使用 MAY_CACHE 操作。|

注意 有关高级表达式的全面讨论,请参阅 “策略和表达方式。“

表达式语法

以下是语法的基本组成部分:

  • 用句点 (.) 分隔关键字,如下所示:

http.req.url

  • 将字符串值括在括号和引号中,如下所示:

http.req.url.query.contains("this")

  • 从命令行配置表达式时,必须转义内部引号(用于分界表达式中值的引号,而不是用于分界表达式的引号)。一种方法是使用斜杠,如下所示:

\"abc\"

选择器表达式按外观顺序进行评估,选择器定义中的多个表达式由逻辑 AND 连接。与选择器表达式不同,您可以在策略规则的高级表达式中指定布尔运算符并修改优先级。

在缓存策略或选择器中配置表达式

注意: 策略表达式的语法与选择器表达式略有不同。有关高级表达式的全面讨论,请参阅“策略和表达式”。“

使用命令行界面配置策略表达式

  1. 按照“全局绑定集成缓存策略”中的描述启动策略定义。“
  2. 要配置策略规则,请使用引号分隔整个规则,并在转义引号中分隔规则内的字符串值。

下面是该命令的一个示例:

“http.req.url.contains(“jpg”)”

  1. 要添加布尔值,请插入 &&、|| 或! 运算符。

以下是示例:

"http.req.url.contains(\"jpg\") || http.req.url.contains(\"jpeg\")"

"http.req.url.query.contains(\"IssuePage\")"

"http.req.header(\"Host\")contains(\"my.company.com\") && http.req.method.eq(\"GET\") && http.req.url.query.contains(\"v=7\")"

  1. 配置化合物组成部分的评估顺序

"http.req.url.contains(\"jpg\") || (http.req.url.contains(\"jpeg\") && http.req.method.eq(\"GET\"))"

使用命令行界面配置选择器表达式

  1. 按照“关于内容组”中的描述启动选择器定义。“
  2. 要配置选择器表达式,请使用引号分隔整个规则,并在转义引号中分隔规则内的字符串值。

下面是该命令的一个示例:

"http.req.url.contains(\"jpg\")"

  1. 您不能添加布尔值、插入 &&、|| 或! 运算符。输入用引号分隔的每个表达式元素。定义中的多个表达式被视为由逻辑 AND 连接的复合表达式。

以下是示例:

“http.req.url.query.value(“ProductId”)” “http.req.url.query.value(“BatchNum”)” “http.req.url.query.value(“depotLocation”)”

使用 GUI 配置策略或选择器表达式

  1. 启动策略或选择器定义,如“使用配置实用程序配置缓存或失效策略”或“使用配置实用程序配置选择器”中所述。“
  2. 在“表 达式字段中,您可以通过单击“切换到经典语法”手动键入默认语法,也可以使用表达式 编辑器创建新表达式
  3. 要在复合表达式的两个部分之间插入运算符,请单击运算符按钮并选择运算符类型。以下是具有布尔值的已配置表达式的示例(由双垂直条 || 表示):
  4. 单击常用表达式下拉菜单插入常用表达式。
  5. 要测试表达式,请单击评估。在“表 达式赋值器对话框中,选择与表达式匹配的流类型。在数据字段中,粘贴希望使用表达式解析的 HTTP 请求或响应,然后单击评估

显示缓存对象和缓存统计信息

您可以查看特定的缓存对象,还可以查看有关缓存命中、未命中和内存使用情况的摘要统计信息。这些统计信息可以深入了解从缓存提供的数据量、哪些项目最大的性能优势以及您可以调整哪些内容以提高缓存性能。

本部分包括以下详细信息:

  • 查看缓存对象
  • 查找特定缓存响应
  • 查看缓存统计信息

查看缓存的对象

启用缓存后,您可以查看缓存对象的详细信息。例如,您可以查看以下项目:

  • 响应大小和标题大小
  • 状态代码
  • 内容组
  • ETag、Last-Modified 和 Cache-Control 标头
  • 请求网址
  • 命中参数
  • 目标 IP 地址
  • 请求和响应时间

使用命令行界面查看缓存对象列表

在命令提示窗口中,键入:

show cache object

属性 说明
响应大小(字节) 响应标头和正文的大小。
响应标头大小(字节) 响应标题部分的大小。
响应状态代码 随响应一起发送的状态代码。
ETag 响应中插入的 ETag 标头。通常,此标头指示响应最近是否发生了更改。
Last-Modified 响应中插入的最后修改标头。此标头表示响应上次更改的日期。
Cache-Control 在响应中插入的 Cache-Control 标头。
日期 指示响应发送时间的日期标头。
Contentgroup 存储响应的内容组。
复合匹配 如果此对象是基于参数化值缓存的,则此字段值为 YES。
主机 请求此响应的 URL 中指定的主机。
Host port 请求此响应的 URL 中指定的主机的侦听端口
URL 为存储响应发出的 URL。
目标 IP 从中获取此响应的服务器的 IP 地址。
目的端口 目标服务器的侦听端口。
命中参数 如果存储响应的内容组使用命中参数,则会在此字段中列出这些参数。
Hit selector 如果此内容组使用点击选择器,则会在此字段中列出该内容组。
Inval selector 如果此内容组使用失效选择器,则会在此字段中列出该内容组。
Selector Expressions 如果此内容组使用选择器,则此字段将显示定义选择规则的表达式。
Request time 发出请求后的时间(以毫秒为单位)。
响应时间 自缓存开始接收响应的时间(以毫秒为单位)。
年龄 对象在缓存中存在的时间量。
Expiry 在此之后,对象被标记为过期的时间量。
Flushed 响应过期后是否已刷新。
Prefetch 如果已为此内容组配置预读,则从源读取对象到期前的时间。预取不适用于负面对象(例如 404“未找到对象”响应)。
Current readers 大约是当前提供的点击次数。当下载带有 Content-Length 标头对象的响应时,当前未命中值和当前读取器值通常各为 1。当正在下载分块响应对象时,当前未命中值通常为 1,但当前读取器值通常为 0,因为提供给客户端的分块响应不来自集成缓存缓冲区。
Current misses 导致缓存中断和从源服务器读取的当前请求数。此值通常为 0 或 1。如果为内容组启用了“每次轮询”,则计数可以大于 1。
访问量 此对象的缓存命中次数。
Misses 此对象的缓存未命中次数
Compression format 应用于此对象的压缩类型。压缩格式包括 gzip、deflate、compress 和 pack200-gzip。
HTTP version in response 用于发送响应的 HTTP 版本。
Weak etag present in response 如果实体的位发生变化,则强 etag 标头会发生变化。强标题基于对象的八位字节值。如果实体的含义发生变化,则弱 etag 标头会发生变化。弱 etag 值基于语义身份。弱 etags 值以“W.”开头
Negative marker cell 标记对象是可缓存的,但它尚未满足缓存的所有条件。例如,对象可能超出内容组的最大响应大小。为此类型的对象创建标记单元格。下次用户发送此对象的请求时,会提供缓存未命中。
Reason marker created 创建标记单元格的原因(例如,“等待 minhit”,“内容长度响应数据不在组大小限制内”)。
Auto poll every time 如果集成缓存收到已经过期的 200 OK 响应与验证器(最后修改或 ETag 响应标头),它会存储响应并将其标记为自动 PET(每次自动轮询)。
Citrix ADC Etag inserted in response Citrix ADC 设备生成的 ETag 标头的变体。如果 Citrix ADC 在响应中插入 Etag,则会显示 YES 值。
Full response present in cache 指示这是否为完整响应。
Destination IP verified by DNS 指示存储对象时是否执行 DNS 解析。
Object stored through a cache forward proxy 指示此响应是否由于集成缓存中配置的转发代理而存储。
Object is a Delta basefile 一个三角度压缩的响应。
Waiting for minhits 指示此内容组在缓存响应之前是否需要最少的源服务器点击次数。
Minhit count 如果此内容组在缓存对象之前需要最少的源服务器点击次数,则此字段将显示迄今为止收到的点击次数的计数。
HTTP Request Method 获取此对象的请求中使用的方法 GET 或 POST。
Stored by policy 导致存储此对象的缓存策略的名称。值为“不可用”表示该策略已停用或删除。值为 NONE 表示对象与可见策略不匹配,但是根据缓存的内部条件进行存储。
Application firewall metadata exists 当应用程序防火墙和集成缓存都启用时,将使用此参数。应用程序防火墙会分析响应页的内容,存储其元数据(例如,页面中包含的 URL 和表单),并导出元数据以及对缓存的响应。缓存存储页面和元数据,当缓存为页面提供服务时,它会将元数据发送回请求的会话。
HTTP callout object, name, type, response 这些单元格指示此数据是否存储为 HTTP 标注表达式的结果,并提供有关标注和相应响应的各个方面的信息。有关 HTTP 标注的更多信息,请参阅“HTTP 标注”。

使用 GUI 查看缓存对象

导航到优化 > 集成缓存 > 缓存对象。您可以查看所有缓存的对象并根据您的要求对它们进行相应的排序。

查看缓存对象

Find particular cached responses

您可以根据搜索条件在缓存中查找单个项目。查找缓存项目有不同的方法,具体取决于包含数据的内容组是否使用命中和失效选择器,如下所示:

  • 如果内容组使用选择器,则只能使用缓存项目的定位器 ID 进行搜索。
  • 如果内容组不使用选择器,则可以使用 URL、主机、内容组名称等条件进行搜索。

搜索缓存响应时,您可以通过 URL 和主机查找某些项目。如果响应位于使用选择器的内容组中,则只能通过使用定位器编号(例如,0x00000000ad7af00000050)找到响应。要保存定位器编号以供以后使用,请右键单击条目并选择复制。有关选择器的更多信息,请参阅 “配置选择器和基本内容组。“

使用命令行界面在没有选择器的内容组中显示缓存响应

在命令提示窗口中,键入:

show cache object [-locator <positiveInteger>] | [(-url <URL> (-host <hostName> [-port <port>] [-groupName <contentGroupName>] [-httpMethod GET | POST ])) | [-httpStatus <positive integer>] | -group <contentGroupName> | -ignoreMarkerObjects (ON | OFF) | -includeNotReadyObjects (ON | OFF)]

使用命令行界面显示具有选择器的内容组中的缓存响应

在命令提示窗口中,键入:

show cache object -locator <locatorString> MarkerObjects ( ON | OFF ) | -includeNotReadyObjects ( ON | OFF ) | [-httpStatus<positive integer>]

使用配置实用程序在没有选择器的内容组中显示缓存响应

导航到“优化”>“集成缓存”>“缓存对象”,单击“搜索”,然后设置搜索条件以查看所需的缓存响应。

如果尚未配置任何内容组,则所有对象都位于“默认”组中。

View cache statistics

下表汇总了您可以查看的详细缓存统计信息。

|Counter|说明| |— |— | |访问量|在集成缓存中找到并从中提供服务的响应。包括静态对象,例如图像文件、状态代码为 200、203、300、301、302、304、307、403、404、410 的页面以及与缓存操作匹配用户定义策略的响应。| |Misses|截获的 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 设备在缓存中找不到请求的对象,则会从源服务器获取对象。这被称为缓存未命中。可存储缓存缺失可存储在缓存中。| | 不可存储的错误 | 不可存储的缓存错误不能存储在缓存中。| | 丢失 | 所有缓存未命中。| | 重新验证 | Cache-Control 标头中的 Max-Age 设置确定中间缓存何时必须使用集成缓存重新验证内容,然后再将其提供给用户。 有关详细信息,请参阅“插入 Cache-Control 标头”。| | 成功重新验证 | 已执行的重新验证次数。 有关详细信息,请参阅“插入 Cache-Control 标头”。“| | 转换为条件 ReQ| 缓存 PET 对象的用户代理请求始终转换为条件请求并发送到源服务器。有关 详细信息,请参阅“每次收到请求时轮询源服务器”。“| | 可存储缺失率 (%) | 可存储缓存未命中值占不可存储缓存未命中的百分比。| | 成功复核比率 (%) | 成功重新验证占所有重新验证尝试的百分比。 有关详细信息,请参阅“插入 Cache-Control 标头”。“| | 在最后一个字节过期 | 缓存在收到最后一个正文字节后立即过期内容的次数。仅适用于积极响应,如表中所述“缓存命中和未命中”。“ 有关更多信息,请参阅“性能优化示例”。“| | 闪存缓存缺失 | 如果启用闪存缓存,缓存只允许一个请求到达服务器,从而消除闪存人群。此统计数据指示缓存未命中的闪存缓存请求数。有 关详细信息,“将请求排队到缓存。“| | 闪存缓存命中 | 缓存命中的闪存缓存请求数量。 有关详细信息,请参阅“将请求排队到缓存。“| | 参数化的请求 | 将策略与失效 (INVAL) 操作匹配,以及使用失效选择器或参数有选择性地过期组中缓存的对象的内容组匹配的请求。| | 完全复制请求 | 匹配配失效策略的请求,其中配置了 In-G组参数并使一个或多个内容组过期。| | 反复请求 | 与失效策略匹配并导致特定缓存响应或整个内容组过期的请求。 | | 参数化请求 | 使用具有参数化内容组的策略处理的缓存请求数。| | 参数化的非 304 命中 | 使用具有参数化内容组的策略处理的缓存请求数,其中找到了完整的缓存响应,并且响应不是 304(未更新的对象)响应。| | 参数化 304 命中 | 使用具有参数化内容组的策略处理的缓存请求数,其中找到缓存对象,且对象是 304(未更新的对象)响应。| | 参数化的命中总数 | 使用具有参数化内容组的策略处理的缓存请求数,其中找到了缓存对象。| | 参数化 304 命中比率 (%) | 使用参数化策略找到的 304(对象未更新)响应的百分比,相对于所有缓存命中。| | 每次请求轮询 | 如果启用每次轮询,Citrix ADC 设备在提供存储对象之前始终咨询源服务器。 有关详细信息,请参阅“每次收到请求时轮询源服务器”。“| | 每次点击时轮询 | 使用“每次轮询”方法找到缓存命中的次数。有关 详细信息,请参阅“每次收到请求时轮询源服务器”。“| | 轮询每次点击率 (%) | 使用轮询每次时间方法的缓存点击率百分比,相对于使用轮询每次搜索缓存对象的所有搜索。有关详细信息,请参阅“每次收到请求时轮询源服务器”。“| | 最大内存 (KB) | Citrix ADC 设备中分配给缓存的最大内存量。有关详细信息,请参阅“为缓存配置全局属性”。“| | 最大内存活动值 (KB) | 将在内存实际分配到缓存之后设置的最大内存量(活动值)。有关详细信息,请参阅“如何为各种方案配置 Citrix ADC 设备的集成缓存功能。“| | 利用内存 (KB) | 实际使用的内存量。 | | | 内存分配失败 | 为在缓存中存储响应而利用内存的失败尝试次数。 | | 迄今为止最大响应 | 在缓存或源服务器中找到并发送到客户端的最大响应(以字节为单位)。 | | 缓存对象 | 缓存中的对象数量,包括尚未完全下载的响应和已过期但尚未刷新的响应。 | | 标记对象 | 当响应超过内容组的最大或最小响应大小,或者尚未收到内容组的最小点击次数时,将创建标记对象。 | | 正在提供的点击 | 已从缓存提供的点击次数。 | | 正在处理的未命中 | 从源服务器获取、存储在缓存中然后提供的响应。应该近似可存储缺失的数字。不包括不可存储的未命中。|

使用命令行界面查看摘要缓存统计信息

在命令提示窗口中,键入:

stat cache

使用命令行界面查看特定缓存统计信息

在命令提示窗口中,键入:

stat cache -detail

> stat cache -detail

Integrated Cache Statistics - Detail
Integrated Cache Statistics - Summary
                                          Rate (/s)                Total


Hits                                               0                    0

Misses                                             0                    0

Requests                                           0                    0

Hit ratio(%)                                      --                    0

Origin bandwidth saved(%)                         --                    0
Cached objects                                    --                    0

Marker objects                                    --                    0
                                          Rate (/s)                Total

Requests                                           0                    0


Hit Statistics

                                          Rate (/s)                Total


Non-304 hits                                       0                    0

304 hits                                           0                    0


Sql hits                                           0                    0


Hits                                               0                    0

304 hit ratio(%)                                  --                    0

Hit ratio(%)                                      --                    0

Origin bandwidth saved(%)                         --                    0
Byte Statistics
                                          Rate (/s)                Total


Bytes served by Citrix ADC                        648             55379204

Bytes served by cache                              0                    0
Byte hit ratio(%)                                 --                    0
Compressed bytes from cache                        0                    0

Miss Statistics

                                          Rate (/s)                Total


Storable misses                                    0                    0

Non-storable misses                                0                    0

Misses                                             0                    0

Revalidations                                      0                    0

Successful revalidations                           0                    0

Conversions to conditional req                     0                    0


Storable miss ratio(%)                            --                    0
Successful reval ratio(%)                         --                    0

Flashcache Statistics
                                          Rate (/s)                Total


Expire at last byte                                0                    0

Flashcache misses                                  0                    0
Flashcache hits                                    0                    0

Invalidation Statistics

                                          Rate (/s)                Total

Parameterized inval requests                       0                    0


Full inval requests                                0                    0



Inval requests                                     0                    0

Parameterized Caching Statistics

                                          Rate (/s)                Total


Parameterized requests                             0                    0

Parameterized non-304 hits                         0                    0

Parameterized 304 hits                             0                    0


Total parameterized hits                           0                    0

Parameterized 304 hit ratio(%)                    --                    0

Poll Every Time (PET) Statistics

                                          Rate (/s)                Total


Poll every time requests                           0                    0

Poll every time hits                               0                    0

Poll every time hit ratio(%)                      --                    0

Memory Usage Statistics
                                              Total

Maximum memory(KB)                                 0

Maximum memory active value(KB)                    0

Utilized memory(KB)                                0

Memory allocation failures                         0

Largest response so far(B)                         0

Cached objects                                     0

Marker objects                                     0

Hits being served                                  0
Misses being handled                               0
 Done

使用 GUI 查看摘要缓存统计信息

  1. 单击页面顶部的 仪表板 选项卡。
  2. 向下滚动到窗口的集成缓存部分。
  3. 要查看详细统计信息,请单击表底部的“更多…”链接。

使用 GUI 查看特定缓存统计信息

  1. 单击页面顶部的报告选项卡。
  2. 在“内置报告”下,展开集成缓存,然后单击要查看的统计信息的报告。
  3. 要将报告另存为模板,请单击另存为并命名报告。保存的报告将显示在自定义 报告”下。

为缓存策略和选择器配置表达式