Coldfusionacached after and cacheed with in suggestion

Muito bem, é o seguinte..

A minha pergunta é simples... Se " cachedWithin "cache a consulta para o tempo específico e" cachedAfter "cache a consulta após um tempo específico, então como eu cache uma consulta" depois de 2 horas a partir de agora e cache-lo por 10 minutos?"

Quero guardar uma consulta daqui a 2 horas e guardá-la durante 10 minutos.. Tenho seguido o caminho mais rápido até ColdFusion 9, mas não tem nenhum exemplo para a minha exigência.

Por favor, ajuda-me com isto. Qualquer ajuda será apreciada...

Obrigado!

Author: Jared Harley, 2012-11-08

2 answers

É uma etiqueta interessante. Então, o que cachedafter está fazendo é dizer que a consulta será estática após um tempo específico.

Então, o seguinte código iria começar a cache a consulta após a hora do servidor 3PM hoje.

<cfset cachedate = CreateOdbcDateTime(dateformat(now(),'yyyy-mm-dd') & ' 15:00:00') />
<cfquery .... cachedafter="#cachedate#"....>
  QUERY
</cfquery>
Mais comumente, cachedwithin está dizendo a fusão a frio para apenas executar esta consulta a cada 6 horas. Normalmente uso isto para dados que podem não estar mudando muito frequentemente ou dados que levam um longo tempo para carregar.
<cfquery ... cachedwithin="#CreateTimeSpan(0, 6, 0, 0)#" ...>
  QUERY
</cfquery>

Melhor Anotações

 0
Author: Brian Hoover, 2012-11-08 04:53:14

Aqui estão mais dois exemplos demonstrando como cachedafter pode ser usado.

Use-o para actualizar os dados uma vez por dia:

<cfquery .... cachedafter="#DateFormat( Now(), 'YYYY-MM-DD')#">
Quando a data chegar amanhã, a consulta vai correr e actualizar.

Ou, use-o para executar a mesma consulta apenas uma vez por pedido:

<cfset Request.Cachetime = DateFormat( Now() ,"MM/DD/YYYY" ) & " " & TimeFormat( Now(), "HH:MM:SS.L" )>
<cffunction name="getstuff">
    <cfquery name="LOCAL.result" cachedafter="#Request.Cachetime#">
    ....
    </cfquery>
    <cfreturn LOCAL.result />
</cffunction>

Você pode ligar para getstuff() 100 vezes no mesmo pedido e ele só vai executar uma vez contra a base de dados. Dependendo do seu nível de reutilização de código, isso pode ser muito útil.

Para responder a pergunta original então, nenhum destes atributos por si só irá cache por 10 minutos após 2 horas. Uma opção pode ser criar variáveis persistentes em algum escopo para rastrear agora ()+2 horas e agora()+2:10, em seguida, definir cachedwith em 10 minutos apenas quando agora() está entre essas duas vezes.

 0
Author: datico, 2017-01-10 22:46:03