Использование cached с intibute внутри cfquery - PullRequest
5 голосов
/ 14 июня 2010

Когда вы используете атрибут cachedwithin в cfquery, как он сохраняет запрос в памяти. Сохраняет ли он только имя, назначенное запросу? Например, если на моей странице индекса я кеширую запрос в течение часа и называю его getPeople, запрос с тем же именем на другой странице (или на той же странице) использует кэшированные результаты или использует лучшую логику решить, если это тот же запрос?

Кроме того, если в вашем запросе есть переменная, учитывает ли кеш значение переменной?

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Это не только имя - это именно тот запрос, который вы выполняете.

<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 в запросе, который выполняется многократно с разными параметрами, вы будете заполнять кэш запросов запросами с низкой частотой обращений в кэш.

3 голосов
/ 14 июня 2010

С http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

Чтобы использовать кэшированные данные, текущий запрос должен использовать тот же оператор SQL, данные источник, имя запроса, имя пользователя, пароль .

Так что это «ключи», которые «решают, является ли это тот же запрос»

переменной? да, пока вы используете <cfqueryparam>

...