Использование Cachedwithin Attibute внутри CFQuery
-
27-09-2019 - |
Вопрос
Когда вы используете атрибут Cachedwithin в CFQuery, как он хранит запрос в памяти. Он хранит это только на имя, которое вы назначаете запросу? Например, если на моей индексовой странице я кэширую запрос в течение часа и имени, что это GetWeople будет запрос с тем же именем на другую страницу (или ту же страницу для этого) использовать кэшированные результаты или используют его лучшую логику решить, является ли это тот же запрос?
Кроме того, если в вашем запросе есть переменная, кэш учитывает значение переменной?
Решение
Это не только имя - это точный запрос, который вы работаете.
<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>