4

好吧,事情就是这样。。

我的问题很简单......如果“cachedWithin”缓存特定时间的查询,而“cachedAfter”在特定时间后缓存查询,那么如何在“从现在起 2 小时后缓存查询并将其缓存 10 分钟”?

我想在 2 小时后缓存一个查询并将其缓存 10 分钟。我一直在关注 ColdFusion 9 的快速通道,但它没有任何示例满足我的要求。

请帮我解决一下这个。任何帮助将不胜感激...

谢谢!

4

2 回答 2

1

嗯,这是一个有趣的标签。

因此,cachedafter 所做的是说查询在特定时间后将是静态的。

因此,以下代码将在服务器时间今天下午 3 点之后开始缓存查询。

<cfset cachedate = CreateOdbcDateTime(dateformat(now(),'yyyy-mm-dd') & ' 15:00:00') />
<cfquery .... cachedafter="#cachedate#"....>
  QUERY
</cfquery>

更常见的是,cachedwithin 告诉 Cold Fusion 仅每 6 小时运行一次此查询。我通常将它用于可能不会经常更改的数据或需要很长时间才能加载的数据。

<cfquery ... cachedwithin="#CreateTimeSpan(0, 6, 0, 0)#" ...>
  QUERY
</cfquery>

更好的解释

于 2012-11-08T04:53:14.680 回答
0

这里还有两个示例演示了如何使用 cachedafter。

使用它每天刷新一次数据:

<cfquery .... cachedafter="#DateFormat( Now(), 'YYYY-MM-DD')#">

当明天日期翻转时,查询将运行并刷新。

或者,使用它在每个请求中只运行一次相同的查询:

<cfset Request.Cachetime = DateFormat( Now() ,"MM/DD/YYYY" ) & " " & TimeFormat( Now(), "HH:MM:SS.L" )>
<cffunction name="getstuff">
    <cfquery name="LOCAL.result" cachedafter="#Request.Cachetime#">
    ....
    </cfquery>
    <cfreturn LOCAL.result />
</cffunction>

您可以在同一个请求中调用 getstuff() 100 次,它只会对数据库执行一次。根据您的代码重用级别,这可以派上用场。

然后回答最初的问题,这些属性本身都不会在 2 小时后缓存 10 分钟。一种选择可能是在某个范围内创建持久变量以跟踪 now()+2 小时和 now()+2:10,然后仅当 now() 介于这两个时间之间时才将 cachedwithin 设置为 10 分钟。

于 2017-01-10T22:34:36.747 回答