Coldfusion cachedAfter和cachedWithin建议

时间:2012-11-08 04:28:53

标签: caching coldfusion

好的,这就是......

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

我想在2小时后缓存一个查询并将其缓存10分钟。我一直在关注Fast Track到ColdFusion 9,但它没有任何我的要求的例子。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

因此,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>

Better Explanation

答案 1 :(得分: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分钟。