Cfquery内のCachedWithin Attibutionを使用します
-
27-09-2019 - |
質問
cfqueryでcachedwithin属性を使用する場合、クエリをメモリにどのように保存しますか。クエリに割り当てる名前だけで保存しますか?たとえば、私のインデックスページで1時間クエリをキャッシュして名前を付けた場合、それはgetpeopleが別のページ(または同じページ)で同じ名前のクエリを使用します。同じクエリかどうかを判断するには?
また、クエリに変数がある場合、キャッシュは変数の値を考慮しますか?
解決
それは名前だけではありません - それはあなたが実行している正確なクエリです。
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
アプリの他の場所にこの同じクエリを呼び出すと、最初のクエリの半日以内にある場合は、キャッシュバージョンが取得されます。しかし、これらは新鮮なデータのためにデータベースにヒットします。
<!--- Different name, same SQL: A new cached query --->
<cfquery name="getEmployees" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
<!--- Different SQL, same name: Redefining the cached query --->
<!--- Note: As pointed out in comments, it's not really overwriting the old query
of the same name, but making a new one in the cache. The first one by the
same name is still in the cache, waiting for eviction. --->
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name desc
</cfquery>
そして、はい、変数を考慮します。使用する場合 cfqueryparam
- あなたがすべきであるべきである - あなたのデータベースは クエリプラン, 、しかし使用しています cachedwithin
, 、変更されたパラメーターを使用した各クエリは、クエリキャッシングの観点とは異なるものとして扱われます。これは、使用する場合に意味することに注意してください cachedwithin
異なるパラメーターで何度も実行されるクエリでは、キャッシュヒット率が低いクエリでクエリキャッシュをあふれさせることになります。
他のヒント
から http://help.adobe.com/en_us/coldfusion/9.0/cfmlref/wsc3ff6d0ea77859461172e0811cbec22c24-7fae.html
キャッシュされたデータを使用するには、現在のクエリを同じ使用する必要があります SQLステートメント、データソース、クエリ名、ユーザー名、パスワード.
したがって、これらは「キー」です。「同じクエリかどうかを決定する」
変数?はい、あなたが使用する限り <cfqueryparam>