内用CFQUERY cachedwithin属性
-
27-09-2019 - |
题
当您使用cachedwithin属性在CFQUERY它是如何存储在内存中的查询。它是否将它存储仅分配给查询的名字吗?例如,如果我的索引页上我缓存查询一个小时,并命名为getPeople将在不同的页面上使用相同的名称的查询(或为此事在同一页)使用高速缓存的结果或不会使用一些更好的逻辑以决定是否它是相同的查询?
此外,如果存在在查询变量确实缓存考虑变量的值?
解决方案
这不仅是名称 - 这是您正在运行的精确查询
<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
,你会与具有低缓存命中率的查询充斥你的查询缓存。
其他提示
要使用高速缓存的数据,当前查询 必须使用相同的 SQL语句,数据 源,查询名称,用户名, 密码强>
因此,这些是'键的那个“决定它是否是相同的查询”
变量?是的,只要你使用<cfqueryparam>
不隶属于 StackOverflow