2012-02-24 8 views
5

Abbiamo un numero di regioni di cache impostato nella nostra implementazione di nibernate. Per evitare problemi con i server Web con bilanciamento del carico, desidero disabilitare in modo efficace la memorizzazione nella cache delle pagine che modificano i dati memorizzati nella cache. Posso scrivere un metodo che cancella tutte le mie cache di query, le mie cache di classe e la mia entità in cache abbastanza facilmente.Cache di secondo livello di NHibernate - regioni di sfratto

Ma quello che voglio veramente è cancellare la cache per regione. sessionFactory.EvictQueries() avrà un parametro region, ma Evict() e EvictCollection() no. Non voglio buttare via l'intera cache qui, né voglio mantenere una sorta di dizionario maldestro che associa i tipi con le loro regioni di cache. NHibernate ha un modo per chiedere a un'entità o a una collezione quali sono le sue impostazioni di memorizzazione nella cache?

grazie

+0

Ehi @Ted, sembra che tu stia cercando di fare qualcosa manualmente che puoi già collegare. C'è una ragione per cui non stai impostando una sorta di dipendenza dalla cache per rimuovere automaticamente gli articoli quando viene apportata una modifica all'archivio dati? Come un SqlCacheDependency? – swannee

+0

o, meglio ancora, utilizzare una cache distribuita? nHibernate supporta quelli –

+0

Mi piacerebbe usare una cache distribuita, ma i clienti non sono entusiasti, per motivi di clienti stupidi. Sto esaminando CacheDependency ora, anche se stiamo usando Oracle, quindi l'implementazione specifica di SQL Server non mi serve. Sembra che l'implementazione generica di dbCacheDependency funzioni tramite il polling e si basi su alcuni elementi OLEDB. È performante? ha implicazioni per le mie scelte di driver? Sto guardando i driver Oracle di terze parti come DataDirect e Devart e ODP.NET. – Ted

risposta

0

OK, sembra che abbia risposto alla mia stessa domanda. L'interfaccia di default che viene restituita quando si estrapolano i metadati di nibibli non fornisce informazioni sulla memorizzazione nella cache, tuttavia se lo si esplora nelle implementazioni di esso, lo fa. Un po 'maldestro, ma fa il lavoro.

4

Ho appena fatto la stessa cosa. Per il beneficio di tutti, ecco il metodo che ho costruito:

Problemi correlati