Когда Вы используете атрибут cachedwithin в cfquery, как он хранит запрос в памяти. Это хранит его только именем, которое Вы присваиваете запросу? Например, если на моей индексной странице я буду кэшировать запрос в течение часа и буду называть ее, то 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, данные источник, имя запроса, имя пользователя, пароль .
Так это «ключи», которые «решают, является ли это той же переменной запроса»
? да, если вы используете