在cfquery中使用cachedwithin attibute

Jas*_*son 5 coldfusion cfquery coldfusion-8

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

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

Ken*_*ler 5

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

<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
Run Code Online (Sandbox Code Playgroud)

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

<!--- 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>
Run Code Online (Sandbox Code Playgroud)

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