4

よし、ここにある..

私の質問は簡単です...「cachedWithin」が特定の時間クエリをキャッシュし、「cachedAfter」が特定の時間後にクエリをキャッシュする場合、「今から 2 時間後にクエリをキャッシュし、10 分間キャッシュする方法は?」

今から 2 時間後にクエリをキャッシュし、10 分間キャッシュしたいと考えています。ColdFusion 9 への Fast Track に従っていますが、要件を満たす例がありません。

これで私を助けてください。どんな助けでも大歓迎です...

ありがとう!

4

2 に答える 2

1

なるほど、面白いタグですね。

したがって、cachedafter が行っていることは、クエリが特定の時間後に静的になることを示しています。

したがって、次のコードは、今日のサーバー時間の午後 3 時以降にクエリのキャッシュを開始します。

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

より一般的には、cachedwithin は、6 時間ごとにこのクエリのみを実行するように Cold Fusion に指示しています。私は通常、あまり頻繁に変更されない可能性のあるデータや、読み込みに時間がかかるデータにこれを使用します。

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

より良い説明

于 2012-11-08T04:53:14.680 に答える
0

cachedafter の使用方法を示す 2 つの例を次に示します。

これを使用して、1 日 1 回データを更新します。

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

日付が明日に変わると、クエリが実行されて更新されます。

または、リクエストごとに 1 回だけ同じクエリを実行するために使用します。

<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 回呼び出すことができ、データベースに対して 1 回だけ実行されます。コードの再利用のレベルによっては、これは非常に便利です。

元の質問に答えると、これらの属性自体はどちらも、2 時間後に 10 分間キャッシュされません。1 つのオプションとして、now()+2 時間と now()+2:10 を追跡するスコープで永続変数を作成し、now() がこれら 2 つの時間の間にある場合にのみ cachedwithin を 10 分に設定することが考えられます。

于 2017-01-10T22:34:36.747 に答える