当您在 cfquery 中使用 cachedwithin 属性时,它如何将查询存储在内存中。它是否仅按您分配给查询的名称存储它?例如,如果在我的索引页面上我缓存一个查询一个小时并将其命名为 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
对于使用不同参数运行多次的查询,您将使用缓存命中率较低的查询淹没查询缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)