Cache po stronie serwera - Server Side w ASP.NET MVC
Zapisywanie danych w pamięci operacyjnej serwera.
Cachowanie po stronie serwera ma na celu
jak najszybsze zwrócenie danych do klienta,
jak najmniejszym kosztem zużycia zasobów serwera (pamięci i procesora).
Cache po stronie serwera możemy podzielić na 3 podstawowe zakresy:
- cache dla żądania HTTP - dane zapisujemy na czas żądania:
HttpContext.Items["PierwszeZadanie"] = true;
- cache dla użytkownika - dane zapisywane są w sesji i są dostępne tylko dla jednego użytkownika:
HttpContext.Session["username"] = "Login";
- cache dla aplikacji - dane dostępne dla całej aplikacji:
Application["DataUruchomienia"] = System.DateTime.Now;
Poprzednie metody są to metody na najniższym poziomie i są rzadko stosowane. W ASP.NET istnieje bilbioteka
System.Web.Cache ułatwiająca prace z cache. Pozwala ona na zarządzanie:
- czasem żywotności - jak długo dane zapisane w cache będą aktualne np. 20 sekund,
- zależnościami - pomiędzy danymi w cache a innymi elementami aplikacji np. plikami,
- zarządzanie pamięcią - wykorzystywaną na cache (gdy brakuje pamięci część najrzadziej wykorzystywanych danych zostaje usunięta z cache).
Dostępne rodzaje zależności:
- Aggregate - usuwa dany element z cache, gdy zajdą zmiany w powiązanych elementach,
- Custom - usuwanie z cache zależne od własnej klasy,
- File - usuwa powiązany element z cache, gdy zajdą zmiany w pliku lub plik zostanie skasowany,
- Key - usuwa element z cache, gdy zostanie skasowany inny element z cache,
- SQL - usuwa element z cache, gdy zostaną wprowadzone zmiany w określonej tabeli w bazie danych.
Output cache
Output cache to najczęściej stosowana technika cachowania opierająca się na
zapisywaniu wyniku żądania, czyli najczęściej widoku (kodu HTML). W ASP.NET MVC cachowanie wyjściowe dostępne jest poprzez wspomniany przy okazji kontrolerów filtr akcji
OutputCache. Aby użyć output cache dodajemy atrybut przed akcją w kontrolerze.
[OutputCache(Duration = 10, VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
Atrybut OutputCache posiada następujące parametry:
- CacheProfile - wykorzystuje profil cachowania, czyli pewna ogólna zasada cachowania zdefiniowana w pliku web.config (pozwala zmienić zasadę cachowania wielu akcji dzięki zmianie jednej wartości w pliku konfiguracyjnym):
[OutputCache(CacheProfile = "NazwaProfilu")]
public ActionResult Index()
{
return View();
}
Tworzenie profilu w web.config:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="NAzwaProfilu" duration="3600" varyByParam="id"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
- Duration - czas przez jaki dane mają być cachowane:
[OutputCache(Duration = 1)]
public ActionResult Index()
{
return View();
}
- NoStore - brak cachowania (np. wyłączenie cachowania dla jednej akcji),
- Location - określa gdzie dane mają być cachowane, dostępne są następujące opcje:
- SqlDependency - cachowanie zależne od zmian w bazie danych,
- VaryByContentEncoding - cachowanie zależne od kodowania,
- VaryByParam - cachowanie zależne od parametru w akcji:
[OutputCache(VaryByParam = "id")]
public ActionResult Index(int id)
{
return View();
}
- VaryByCustom - cachowanie zależne od indywidualnej implementacji zależności,
- VaryByHeader - cachowanie zależne od nagłówka HTTP.
Cachowanie częściowe
Cachowanie rozproszone
W dużych aplikacjach, gdy dane przechowywane są na więcej niż jednym serwerze niezbędne jest użycie innego bardziej wydajnego sposobu cachowania. Tworzy się osobną, wspólną
warstwę przeznaczoną do cachowania, do której dostęp posiadają wszystkie serwery. Takie rozwiązanie zapewnia lepsza
wydajność,
skalowalność oraz
redundantność (odporność na awarie pojedynczych serwerów). Do cachowania rozproszonego służy narzędzie
Microsoft Velocity.
Komentarze facebook (polub nasz profil na FB aby je zobaczyć):