2011-01-19 10 views
26

Obecnie badam integrację cache AppFabirc w mojej aplikacji .net C# i szukam niektórych przykładów kodu takich. Czy są dostępne jakieś próbki kodu źródłowego lub kodu dostępne z pamięci podręcznej AppFabric, na które mogę spojrzeć?AppFabric buforowanie przy użyciu przykładów C#

+0

Czy jest jakiś aspekt buforowania AppFabric, w szczególności dla którego chcesz wyświetlić kod demonstracyjny? – PhilPursglove

+0

Podstawowe operacje, takie jak dodawanie, usuwanie, pobieranie z pamięci podręcznej. Niektóre przykłady użycia tego będą pomocne również w ogólnej konfiguracji aplikacji w kodzie C#. – amateur

+0

Istnieje plik ZIP do pobrania z kilkoma próbkami dostępnymi w firmie Microsoft, wystarczy google. – JensG

Odpowiedz

45

Operations Cache
Pierwszy obiekt, aby utworzyć w kontaktach z buforowania AppFabric jest DataCacheFactory. Można to utworzyć za pomocą zakodowanych na sztywno danych konfiguracyjnych, które informują fabrykę, jak skontaktować się z serwerem pamięci podręcznej, lub bez konfiguracji, w takim przypadku odczytuje konfigurację z pliku web.config/app.config. Moja rekomendacja jest taka, że ​​przechowujesz informacje o konfiguracji w pliku .config, w przeciwnym razie, gdy chcesz coś zmienić w konfiguracji pamięci podręcznej, musisz ponownie skompilować i ponownie rozprowadzić swoją aplikację. Ważne, aby pamiętać o DataCacheFactory jest to, że jest drogie do tworzenia - na pewno nie chcesz utworzyć jedną z nich dla każdej operacji pamięci podręcznej. Rozważ użycie wzoru Singleton - patrz this question po więcej szczegółów.

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

Głównym interfejsem do pamięci podręcznej jest obiekt Cache. Pamięć podręczna jest otrzymywany z GetCache metoda DataCacheFactory użytkownika, przechodząc w imię pamięci podręcznej:

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

Dodawanie pozycji do pamięci podręcznej
Każdy element w pamięci podręcznej ma klucz, który jest ciągiem. Klucz musi być unikalny w pamięci podręcznej - jeśli przekażesz klucz, który już istnieje, dostaniesz wyjątek. Element do buforowania musi być możliwy do szeregowania, aby aplikacja AppFabric mogła wewnętrznie przekazywać go wokół serwerów w pamięci podręcznej. Na najbardziej podstawowym poziomie elementy są dodawane do pamięci podręcznej przy użyciu metody Add.

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

Usuwanie elementu z bufora

myCache.Remove(myCachedItemKey); 

proste jak.

Pobieranie przedmiotu z pamięci podręcznej
Podczas pobierania elementu z pamięci podręcznej używamy wzorca odwzorowania pamięci podręcznej. Oznacza to, że zajrzymy do pamięci podręcznej, aby sprawdzić, czy jest tam pożądany element (za pomocą klucza). Jeśli element znajduje się w pamięci podręcznej, pobieramy element z pamięci podręcznej (potencjalnie przesyłając go do innego typu); w przeciwnym razie podejmiemy kroki, aby od podstaw uzyskać przedmiot, np. odczytywanie z bazy danych, a następnie zapisywanie w pamięci podręcznej tak, aby była dostępna dla nas następnym razem.

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; 
} 

Aktualizacja elementu w 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); 

To podstawowe operacje CRUD, ale jest wiele bardziej, że można dostać się do czynienia z współbieżności!


serwera AppFabric Training Kit systemu Windows można pobrać here, ma sekcję na buforowania. Śledź tag appfabric tutaj, ponieważ jestem pewny, że z czasem będzie wiele innych próbek kodu, rozwiązujących problemy dla ludzi.

+1

Zastanawiasz się, czy ten wzór jest bezpieczny, np. czy jeden serwer może zauważyć, że klucz nie jest obecny, spróbować dodać wpis, a następnie nie, ponieważ inny serwer już budował wpis w ramach przygotowań do dodania wpisu. – redcalx

+2

@locster To jest ważna krytyka tego kodu, chociaż w mojej (ograniczonej) obronie jest ona przeznaczona jako kod demo, a nie jako jakość produkcji. Można go również łatwo rozwiązać, gdy zacznie się przyglądać mechanizmom współbieżności; jedną z fajnych funkcji AppFabric jest to, że możesz "GetAndLock", które obecnie nie istnieją w pamięci podręcznej. Tak więc serwer 1 widzi, że element nie istnieje, więc blokuje go w ramach przygotowań do wykonania połączenia z bazą danych. Serwer 2 widzi, że element nie istnieje, próbuje "GetAndLock" go i nie działa, ponieważ serwer 1 ma już blokadę. Zobacz http://tinyurl.com/c5t6w45 – PhilPursglove

8

Warto również dodać, że wzorzec Singleton ma zasadnicze znaczenie, jeśli używa się usługi buforowania Azure AppFabric, ponieważ każda instancja obiektu DataCacheFactory tworzy nowe połączenie z usługą buforowania usługi Azure AppFabric. Ponieważ liczba połączeń jest ograniczona w zależności od wielkości pamięci podręcznej (128 MB pamięci podręcznej zawiera 5 połączeń), bardzo szybko zablokujesz wszystkie połączenia, jeśli nie użyjesz ponownie tej samej fabryki!

+4

Pamięć podręczna 128 MB zawiera teraz 10 połączeń –