2011-01-19 18 views
26

Attualmente sto ricercando l'integrazione della caching di AppFabirc nella mia applicazione .net C# e cercando alcuni esempi di codice di tale. Sono disponibili campioni open source o di codice disponibili nella cache AppFabric disponibile che posso visualizzare?Esempi di memorizzazione nella cache di AppFabric mediante C#

+0

C'è qualche aspetto del caching di AppFabric in particolare per il quale si desidera vedere il codice demo? – PhilPursglove

+0

Le operazioni di base come aggiungere, rimuovere, ottenere dalla cache. Alcuni esempi di utilizzo di questo sarebbero utili anche per l'impostazione generale di appfabric nel codice C#. – amateur

+0

C'è un download ZIP con un numero di campioni disponibili da Microsoft, ma solo google per esso. – JensG

risposta

45

Attività cache
Il primo oggetto di creare quando si tratta di AppFabric caching è un DataCacheFactory. Questo può essere creato con dati di configurazione hard-coded che comunicano alla fabbrica come contattare il server cache, o senza configurazione, nel qual caso legge la configurazione dal proprio file web.config/app.config. La mia raccomandazione è di mantenere le informazioni di configurazione nel file .config, altrimenti quando si desidera modificare qualcosa nella configurazione della cache, è necessario ricompilare e ridistribuire l'applicazione. La cosa importante da ricordare su DataCacheFactory è che è costoso da creare - sicuramente non si vuole creare uno di questi per ogni operazione di cache. Prendi in considerazione l'utilizzo del pattern Singleton - vedi this question per ulteriori dettagli.

// Create a factory reading the config info from the .config file 
DataCacheFactory factory = new DataCacheFactory(); 

L'interfaccia principale di una cache è tramite l'oggetto Cache. La cache è ottenuta dal metodo di DataCacheFactory GetCache, passando il nome della cache:

DataCache myCache = factory.GetCache("myCache"); 

aggiunge una voce alla cache
Ogni elemento in una cache ha una chiave, che è una stringa. La chiave deve essere univoca per la cache: se passi una chiave già esistente otterrai un'eccezione. L'elemento da memorizzare nella cache deve essere serializzabile, in modo che AppFabric possa passarlo internamente attorno ai server nella cache. Al livello più elementare, gli elementi vengono aggiunti alla cache usando il metodo Add.

object myCachedItem = new Object(); 
string myCachedItemKey = "MyCacheKey"; 
myCache.Add(myCachedItemKey, myCachedItem); 

Rimozione di una voce dalla cache

myCache.Remove(myCachedItemKey); 

Semplice come.

Ottenere un elemento dalla cache
Quando si ottiene un elemento dalla cache, viene utilizzato il modello cache-aside. Ciò significa che cerchiamo nella cache per vedere se l'elemento desiderato è lì (usando la chiave). Se l'elemento si trova nella cache, prendiamo l'elemento memorizzato nella cache (potenzialmente trasmettendolo a un tipo diverso); altrimenti prendiamo provvedimenti per ottenere l'articolo da zero, ad es. la lettura da un database, e quindi la cache in modo che sia lì per noi la prossima volta.

object cachedObject; 
string myImportantDataKey = "MyImportantDataTable"; 
DataTable myImportantData; 

// This is an object because everything is returned from the cache as an object 
cachedObject = myCache.Get(myImportantDataKey); 
// Check to see if we got something from the cache 
if (cachedObject == null) 
{ 
    // The requested item wasn't in the cache - a cache miss 
    // Go get the data from the db 
    myImportantData = getMyImportantDataFromMyDatabase(); 

    // Add the item to the cache so we've got it for next time 
    myCache.Add(myImportantDataKey, myImportantData); 
} 
else 
{ 
    // We have the cached object so cast it to a DataTable 
    myImportantData = (DataTable)cachedObject; 
} 

Aggiornamento di una voce nella cache

// Put can be used to update an existing item in the cache 
// If the item does not exist then it functions like Add 
myCache.Put(myImportantDataKey, myUpdatedImportantData); 

Ecco le operazioni CRUD di base, ma c'è molto di più che si può ottenere in per affrontare la concorrenza!


Il Kit di Windows Server AppFabric formazione può essere scaricato here, ha una sezione dedicata caching. Continua a seguire il tag appfabric perché sono sicuro che nel tempo ci saranno molti altri esempi di codice che risolvono i problemi per le persone.

+1

Chiedersi se quel modello è sicuro, ad es. un server può osservare che una chiave non è presente, tentare di aggiungere una voce e quindi fallire perché un altro server stava già costruendo la voce in preparazione all'aggiunta della voce. – redcalx

+2

@locster Questa è una critica valida di questo codice, sebbene nella mia (limitata) difesa sia inteso come codice demo, non come qualità di produzione. Risulta anche semplice quando inizi a guardare i meccanismi di concorrenza; una delle caratteristiche di AppFabric è che puoi 'GetAndLock' elementi che non esistono attualmente nella cache. Quindi il Server 1 vede che l'elemento non esiste, quindi lo blocca in preparazione per effettuare una chiamata al database. Il server 2 vede che l'elemento non esiste, prova a "GetAndLock" e non riesce perché il server 1 ha già il blocco. Vedi http://tinyurl.com/c5t6w45 – PhilPursglove

8

Vale anche la pena aggiungere che il pattern Singleton è praticamente essenziale se si utilizza il servizio Cello di AppFabric di Azure poiché ogni instatiazione di DataCacheFactory crea una nuova connessione al servizio Caching di AppFabric di Azure. Dato che il numero di connessioni è limitato in base alla dimensione della cache (128 MB di cache include 5 connessioni) si bloccherà molto rapidamente tutte le connessioni se non si riutilizza la stessa fabbrica!

+4

128 MB di cache ora include 10 connessioni –

Problemi correlati