【发布时间】:2017-11-30 21:07:02
【问题描述】:
我发现一段代码可以在 ColdFusion 10 引擎下运行,但不能在 ColdFusion 2016 (CF12) 引擎下运行。
我有一个 CFC,其中包含由函数调用获取的缓存查询。假设我有一个要缓存的查询,但我对该查询使用的 db 表进行了更改。我没有看到返回的缓存查询中的数据,所以我需要刷新查询缓存,很简单。这就是我设置代码的方式:
<cffunction name="getVariables" access="public" returntype="query">
<cfargument name="time_span" required="true" default="#this.cacheSpan#" />
<cfset var qryGetVariables="">
<!--- IF REFRESH, NEW QRYTIMESPAN --->
<cfif arguments.time_span eq 0 AND NOT this.bln_refresh>
<!--- IF time_span 0 but not refresh, reset to original cache span --->
<cfset arguments.time_span = this.cacheSpan />
</cfif>
<cfquery name="qryGetVariables" datasource="#this.dsn#" cachedwithin="#arguments.time_span#">
select *
from get_variables
order by id, value
</cfquery>
<cfreturn qryGetVariables>
</cffunction>
我在同一个 CFC 中调用一个函数,该函数以下列方式刷新此查询:
this.bln_refresh = true;
<cfinvoke method="getVariables" returnvariable="qryReturn">
<cfinvokeargument name="time_span" value="0" />
</cfinvoke>
this.bln_refresh = false;
同样,这之前在 ColdFusion 10 上有效,但现在在 ColdFusion 2016 上无效。我需要做些什么不同的事情来刷新此特定查询的缓存?
【问题讨论】:
-
我不使用 2016 版,但缺少参数类型可能是相关的。顺便问一下,
does not work是什么意思? -
我的意思是当我刷新 cachedwithin timespan 变量时,它应该刷新缓存的查询以使用我在数据库中添加的新值来更新它。 “不起作用”意味着当我通过 CFC 方法进行刷新时,通过为时间跨度传递 0 的参数,缓存的查询不会被刷新。它仍然显示旧值而不是新值,这在 CF10 之前有效。
-
@user1100412 很高兴您找到了解决方案。不要在您的问题中包含解决方案,而是将其添加为该问题的新答案并接受它。可以在这里回答您自己的问题。就像你所做的那样给予适当的信任。干杯。
标签: caching coldfusion refresh query-cache coldfusion-2016