Вопрос

Когда вы используете атрибут 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>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top