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#
Odpowiedz
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.
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
@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
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!
Pamięć podręczna 128 MB zawiera teraz 10 połączeń –
Czy jest jakiś aspekt buforowania AppFabric, w szczególności dla którego chcesz wyświetlić kod demonstracyjny? – PhilPursglove
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
Istnieje plik ZIP do pobrania z kilkoma próbkami dostępnymi w firmie Microsoft, wystarczy google. – JensG