Cached查询行为在CF 10和CF 2016之间的变化



我正在从Adobe CF10升级到CF2016,并注意到在CF2016修改中,将其升级为缓存的查询对象,似乎持续回到缓存。在CF10中似乎并非如此。

例如:

<cfquery datasource="myDs" name="rs" cachedwithin="#createtimespan(0,0,5,0)#">
    SELECT 10 AS value
</cfquery>
<cfset rs.value = 2016>
<cfquery datasource="myDs" name="rs" cachedwithin="#createtimespan(0,0,5,0)#">
    SELECT 10 AS value
</cfquery>
<!--- CF10 outputs 10 --->
<!--- CF2016 outputs 2016 --->
<cfoutput>#rs.value#</cfoutput>

我在这里误会了什么吗?我找不到任何地方记录的。欢迎RTFM。

让我们定义一个查询对象,将其命名variables.rs并将其放入缓存中。

 <cfquery datasource="myDs" name="rs" cachedwithin="#createtimespan(0,0,5,0)#">
    SELECT 10 AS value
</cfquery>

此查询对象包含一个记录和一个列(名为value(。如果我们输出该记录列的值(称为variables.rs.value(,我们会看到10的值。

现在,让我们定义一个名为variables.rsstruct,其单个键名为value,值为2016。如果输出此值(称为variables.rs.value(,我们会看到2016的值。

最后,让我们再次运行该查询。

  <cfquery datasource="myDs" name="rs" cachedwithin="#createtimespan(0,0,5,0)#">
    SELECT 10 AS value
</cfquery>

但是查询是在cachedwithin之时运行的,并且记录集从未更改,因此无需更新查询缓存。因此,将不会更新变量variables.rs

这将variables.rs留作结构,其键命名为value,其值为2016

这似乎是应发生的事件的正确进展。以前版本中可能是一个错误,导致它们像他们一样行动,这是在2016年固定的(是!?(。

很可能没有人创建一个错误报告,概述了重新创建步骤的确切问题,因此,CF开发团队不知道这是一回事。

couse,对您的代码进行重构可能比等待解决问题的呼吸更容易。但是您至少可以试一试。我的公司在2016年和以前的版本之间对funcitonality进行了许多重大变化,并且最多(即使不是全部(固定。

最新更新