ADC

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

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

在为集成缓存配置策略和选择器之前,至少需要知道 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
<!--NeedCopy-->

配置表达式时,请注意以下限制:

表达式类型 限制
请求 请勿使用 CACHE 或 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. 不能添加布尔值、插入 &&、

下面是几个示例:

"http.req.url.query.value("ProductId")" "http.req.url.query.value("BatchNum")" "http.req.url.query.value("depotLocation")"
<!--NeedCopy-->

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

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

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

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

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

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

查看缓存的对象

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

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

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

在命令提示符下,键入:

show cache object

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

使用 GUI 查看缓存的对象

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

查找特定的缓存响应

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

  • 如果内容组使用选择器,则只能使用缓存项目的定位器 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>]

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

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

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

查看缓存统计

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

|计数器|说明| |— |— | |访问量|在集成缓存中找到并从集成缓存中提供的响应。包括静态对象,例如图像文件、状态代码 200、203、300、301、302、304、307、403、404、410 的页面以及与用户定义策略与缓存操作匹配的响应。| |错过|截获的 HTTP 请求,其中响应最终是从源服务器获取的。| |请求|缓存请求总数加上缓存未命中总数。| |非 304 命中|如果用户多次请求某个项目,并且缓存中的项目自 NetScaler 设备上次提供该项目以来未发生变化,则 NetScaler 设备将提供 304 响应,而不是缓存的对象。 此统计数据显示 NetScaler 设备从缓存中提供的项目数量,不包括 304 个响应。| |304 HITS | 304 个(未修改对象)响应 NetScaler 设备从缓存中提供的响应。| |304 单击率 (%) | NetScaler 设备提供的 304 个响应中相对于其他响应的百分比。| | 命中率 (%) | NetScaler 设备从缓存中提供的响应(缓存请求)相对于无法从缓存中提供的响应的百分比。| | 节省的源带宽 (%) | NetScaler 设备因提供缓存响应而在源服务器上保存的处理容量的估计值。| | NetScaler 设备从源服务器和缓存提供的字节总数 | NetScaler 设备提供的字节总数。| | 缓存提供的字节数 | NetScaler 设备从缓存中提供的字节总数。| | 字节命中率 (%) | NetScaler 设备从缓存中提供的数据占所有服务响应中的所有数据的百分比。| | 来自缓存的压缩字节数 | NetScaler 设备以压缩形式提供的数据量(以字节为单位)。| | 可存储的未命中 | 如果 NetScaler 设备在缓存中找不到请求的对象,它将从源服务器中获取对象。这被称为缓存未命中。可存储缓存缺失可存储在缓存中。| | 不可存储的错误 | 不可存储的缓存错误不能存储在缓存中。| | 丢失 | 所有缓存未命中。| | 重新验证 | Cache-Control 标头中的 Max-Age 设置确定中间缓存何时必须使用集成缓存重新验证内容,然后再将其提供给用户。 更多信息请参阅“插入缓存控制标头。“| | 成功的重新验证 | 已执行的重新验证数量。 有关详细信息,请参阅“插入 Cache-Control 标头”。“| | 转换为条件 ReQ| 缓存 PET 对象的用户代理请求始终转换为条件请求并发送到源服务器。 有关更多信息,请参阅“每次收到请求时轮询源服务器。“| | 可存储丢失率 (%) | 可存储缓存未命中占不可存储缓存未命中的百分比。| | 成功的重新验证率 (%) | 成功重新验证占所有重新验证尝试的百分比。 更多信息请参阅“插入缓存控制标头。“| | 最后一个字节过期 | 缓存在收到最后一个正文字节后立即过期内容的次数。仅适用于积极响应,如表中所述“缓存命中和未命中”。“ 有关更多信息,请参阅“性能优化示例。“| |Flashcache Misses| 如果启用 Flash Cache,缓存只允许一个请求到达服务器,从而消除了闪存人群。此统计数据指示缓存未命中的闪存缓存请求数。 有关更多信息,“将请求排队到缓存。“| | FlashCache Hits | 缓存命中率的闪存缓存请求数。 更多信息请参阅“将请求排队到缓存。“| | 参数化的无效请求 | 与失效 (INVAL) 操作的策略和使用失效选择器或参数有选择性地过期组中缓存对象的内容组相匹配的请求。| | 完全无效请求 | 与配置了 invalGroups 参数并过期一个或多个内容组的无效策略匹配的请求。| |Inval Requests| 与失效策略相匹配并导致特定缓存响应或整个内容组过期的请求。| | 参数化请求 | 使用具有参数化内容组的策略处理的缓存请求数。| | 参数化非 304 HITS| 使用具有参数化内容组的策略处理的缓存请求数,其中找到了完整的缓存响应,响应不是 304(未更新对象)响应。| | 参数化 304 HITS| 使用具有参数化内容组的策略处理的缓存请求数,其中找到了缓存对象,对象是 304(未更新对象)响应。| | 参数化 HITS| 使用具有参数化内容组的策略处理的缓存请求数(在其中找到缓存对象)。| | 参数化 304 命中率 (%) | 使用参数化策略找到的 304 个(对象未更新)响应的百分比,相对于所有缓存命中率。| | 每次请求时轮询 | 如果启用了“每次轮询”,NetScaler 设备在提供存储的对象之前始终会咨询源服务器。 有关更多信息,请参阅“每次收到请求时轮询源服务器。“| | 每次 Poll Poll | 使用“每次轮询”方法找到缓存命中的次数。 有关更多信息,请参阅“每次收到请求时轮询源服务器。“| | 轮询每次命中率 (%) | 使用 Poll All Time 方法的缓存命中率百分比,相对于使用 Poll All Time 对缓存对象的所有搜索。有关详细信息,请参阅“每次收到请求时轮询源服务器”。“| | 最大内存 (KB) | NetScaler 设备中分配给缓存的最大内存量。更多信息请参阅“为缓存配置全局属性。“| | 最大内存活动值 (KB) | 将内存分配给缓存后设置的最大内存量(活动值)。有关详细信息,请参阅“如何为各种方案配置 NetScaler 设备的集成缓存功能。“| | 利用内存 (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 NetScaler                        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
<!--NeedCopy-->

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

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

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

  1. 单击页面顶部的“报告”选项卡。
  2. 在“内置报告”下,展开“集成缓存”,然后单击包含要查看的统计数据的报告。
  3. 要将报告另存为模板,请单击 另存为 并命名报告。保存的报告将显示在 自定义 报告下。
为缓存策略和选择器配置表达式