在cfquery中使用cachedwithin属性

时间:2010-06-14 18:50:20

标签: coldfusion cfquery coldfusion-8

在cfquery中使用cachedwithin属性时,如何将查询存储在内存中。它是否仅按您分配给查询的名称存储它?例如,如果在我的索引页面上我缓存了一个小时的查询并将其命名为getPeople,则在不同的页面上使用相同名称的查询(或相同的页面)使用缓存的结果或使用更好的逻辑判断它是否是同一个查询?

此外,如果查询中有变量,缓存是否会考虑变量的值?

2 个答案:

答案 0 :(得分:5)

这不仅仅是名称 - 它是您正在运行的确切查询。

<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>

如果您在应用中的其他位置调用此相同查询,则会在第一次查询的半天内获得缓存版本。但这些将在数据库中找到新数据:

<!--- Different name, same SQL: A new cached query --->
<cfquery name="getEmployees" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>

<!--- Different SQL, same name: Redefining the cached query --->
<!--- Note: As pointed out in comments, it's not really overwriting the old query
      of the same name, but making a new one in the cache. The first one by the
      same name is still in the cache, waiting for eviction. --->
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name desc
</cfquery>

是的,它确实考虑了一个变量。如果您使用cfqueryparam - 您应该这样做 - 您的数据库将缓存查询计划,但即使使用cachedwithin,也会处理每个带有更改参数的查询与查询缓存视角不同。请注意,这意味着如果对使用不同参数运行多次的查询使用cachedwithin,则会使用缓存命中率较低的查询充斥查询缓存。

答案 1 :(得分:3)

来自http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

  

使用缓存数据,当前查询   必须使用相同的 SQL语句,数据   来源,查询名称,用户名,   密码

所以那些是“决定它是否是同一个查询”的“密钥”

变量?是的,只要你使用<cfqueryparam>