0

ストアド プロシージャをキャッシュしようとしています。ColdFusion 10 をダウンロードし、Railo 4 サーバーで実行しています。Railo Admin (デフォルトのキャッシュ) でデータベース接続をセットアップしており、Adobe ドキュメントによると、cachedWithin属性を使用するだけでよく、キャッシュされるはずです。ただし、そうではなく、ページに10秒以上かかるため、これは確かです。ロードする!

ストアドプロシージャの周りのタグを使用して動的にキャッシュしようとしましたcfcacheが、キャッシュしたくないページ全体をキャッシュし続けました。CachePutCacheGet機能しますが、私のコードは効果的に対応するには複雑です。

超混乱。

関連するコードは次のとおりです。

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
                <cfprocparam type="In" value="#IDate#" cfsqltype="CF_SQL_TIMESTAMP">
                <cfprocparam type="In" value="12" cfsqltype="CF_SQL_INTEGER">
                <cfprocparam type="In" value="1" cfsqltype="CF_SQL_BIT">
                <cfprocresult name="DeptQuery">
</cfstoredproc>

更新: ストアド プロシージャは、それほど時間のかかるものではないことがわかりました! そして、ついにキャッシュを手に入れました!しかし、同じストアド プロシージャの何千ものバリアントを複数のページ (各ページだけで複数のストアド プロシージャを持つ) にキャッシュしており、指定したのは cachedWithin パラメータだけであるため、それがどのように行われているかについて混乱しています。それらをビューにプルアップするときに、どのプロシージャーがどれであるかをどのように知るのでしょうか?

4

1 に答える 1

1

日付/時刻 (のように見えます) を渡しています。クエリ キャッシュは、クエリの引数 (具体的には、使用される SQL) に基づいています。毎回異なる日付/時刻値を渡していると思います。毎回同じ日付値を渡すだけでない限り、異なる日付/時刻値ごとに独自のキャッシュ結果がありますか?

たとえば、これらはキャッシュ用の 2 つの異なるオブジェクトとして扱われます。

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
     <cfprocparam type="In" value="2013-06-13 09:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
     <cfprocparam type="In" value="2013-06-13 10:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>    

ドキュメントから:

キャッシュされたデータを使用するには、現在のクエリで同じ SQL ステートメント、データ ソース、クエリ名、ユーザー名、およびパスワードを使用する必要があります。

于 2013-06-13T14:14:54.607 に答える