1

这是我的代码

<cfquery name="employeeData" datasource="xyz" cachedwithin="#CreateTimeSpan(0,0,60,0)#">
    SELECT employee, salary
    FROM employee
</cfquery>

<cfquery name="wellPaidEmployee" dbtype="query">
    SELECT employee, salary
    FROM employeeData WHERE salary > <cfqueryparam cfsqltype="cf_sql_integer" value="10000">
</cfquery>

条件:
第一个查询EmployeeData由于某些问题而超时并抛出错误“查询超时”

问题:

  1. 在下一次调用中,查询 EmployeeData 会运行还是会在缓存中出现查询超时错误,因为我们使用 cachewithin 对其进行了缓存?
  2. wellPaidEmployee 在第一次运行和下一次运行时会发生什么?
4

2 回答 2

3

只有成功的数据库请求会被缓存,所以 EmployeeData 查询将在下一次传递时运行。

如果employeeData 没有出错,wellPaidEmployee 查询将运行。

于 2019-08-12T15:39:50.767 回答
0

评论太长了。

查询超时和缓存过期是两件不同的事情。

<cfquery name="employeeData" datasource="xyz" cachedwithin="#CreateTimeSpan(0,0,60,0)#">
SELECT employee, salary
FROM employee
</cfquery>

当它第一次被击中时会运行。它还将其数据保存 60 分钟。如果在 60 分钟内再次访问该数据,缓存超时将重置为零。理论上,如果这些数据每 60 分钟访问一次,它就永远不会命中数据库。

至于

<cfquery name="wellPaidEmployee" dbtype="query">
SELECT employee, salary
FROM employeeData WHERE salary > <cfqueryparam cfsqltype="cf_sql_integer" value="10000">
</cfquery>

它不知道,也不关心底层数据是否来自缓存。它只会返回结果。

如果您收到“查询超时”错误。那是一个完全不同的问题。ColdFusion 连接数据库的方式有问题,或者数据库本身有问题。

于 2019-08-12T21:36:55.167 回答