CF 10和CF 2016之间的缓存查询行为会发生变化

Vic*_*nko 3 coldfusion

我正在从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>
Run Code Online (Sandbox Code Playgroud)

我在这里误解了什么吗?我无法在任何地方找到这个记录.RTFM欢迎.

Adr*_*eno 5

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

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

此查询对象包含一个记录和一个列(已命名value).如果我们输出这一个记录的列variables.rs.value的值,引用为,我们看到的值10.

现在,让我们定义一个struct名为variables.rs,名为单个键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了一个结构,名为key value,其值为2016.

这似乎是应该发生的事件的正确进展.这可能是以前版本中的一个错误导致他们像他们那样行事,这在2016年已经修复(yay!?).

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

更重要的是,你可能更容易重构代码而不是屏住呼吸等待问题被分类,接受,修复和释放.但你至少可以试一试.我的公司在2016年和之前的版本之间已经提交了许多重大变化,并且大多数(如果不是全部)修复了.