2010-06-14 11 views
5

Quando si utilizza l'attributo cache in un file cfquery come archivia la query in memoria. Lo memorizza solo con il nome che assegni alla query? Ad esempio, se nella mia pagina di indice memorizzo una query in cache per un'ora e lo chiamo getPeople eseguirà una query con lo stesso nome su una pagina diversa (o la stessa pagina) utilizzeremo i risultati memorizzati nella cache o userà qualche logica migliore decidere se si tratta della stessa query?Utilizzo di cache con attributi all'interno di cfquery

Inoltre, se nella query è presente una variabile, la cache tiene conto del valore della variabile?

risposta

5

Non è solo il nome: è la query esatta in esecuzione.

<cfquery name="getPeople" cachedwithin=".5" ...> 
select name from employee order by name 
</cfquery> 

Se si richiama questa stessa query in qualsiasi altra parte vostra applicazione, si otterrà la versione in cache se è all'interno di una mezza giornata della prima query. Ma questi colpiranno il database per i nuovi dati:

<!--- 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> 

E sì, prende una variabile in considerazione. Se si utilizza cfqueryparam, operazione che si dovrebbe eseguire, il database memorizzerà nella cache il piano di query , ma anche utilizzando cachedwithin, ogni query con un parametro modificato verrà considerata diversa da una prospettiva di memorizzazione nella cache della query. Nota che ciò significa che se si utilizza cachedwithin in una query eseguita più volte con parametri diversi, si verificheranno inondazioni nella cache delle query con query con bassi tassi di hit della cache.

+0

quindi quello che stai dicendo è che il secondo set di risultati getPeople sostituirà il primo set di risultati getPeople? – Jason

+0

piano di query della cache? veramente? – Henry

+0

@Jason, in base al doc, no, poiché l'istruzione SQL è diversa sebbene abbiano lo stesso nome della query. – Henry

Problemi correlati