cache di secondo livello NHibernate con aggiornamenti esterni
-
24-10-2019 - |
Domanda
Ho un'applicazione web che è del 99% in sola lettura, con un servizio separato che aggiorna il database a intervalli specifici (come ogni 10 minuti). Come può questo servizio dire l'applicazione di invalidare essa la cache di secondo livello? E 'davvero importante? (Io in realtà non importa se ho dati troppo stantio) Se non invalidare la cache di quanto è necessario molto tempo per le registrazioni per ottenere aggiornati (se si utilizza SysCache)
Soluzione
È possibile disporre manualmente la cache di 2 ° livello per una determinata entità, tipo di entità o di una collezione.
Per la cache di secondo livello, ci sono metodi definiti ISessionFactory per sfrattando lo stato della cache di un'istanza, intera classe, istanza raccolta o intera ruolo raccolta.
sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat sessionFactory.Evict(typeof(Cat)); //evict all Cats sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections
Altri suggerimenti
Se sei OK con la possibilità di avere alcuni dati non aggiornati, basta impostare la scadenza predefinita a qualcosa che hai dimestichezza con, e ti verrà impostato.
Esempio:
<property name="cache.default_expiration">120</property>
Imposta la scadenza predefinita per due minuti, in modo da non vedrai mai dati non aggiornati più vecchio di quello.