Azurové tipy: Redis Cache
Pokud vyvíjíte aplikace v cloudových prostředích a vaše aplikace běží na více instancích, nevyhnete se nutnosti cachovat data takovým způsobem, aby byla sdílená skrze všechny stroje. Právě pro tento účel vznikla Azure Redis Cache, která vyniká nízkou latencí a vysokým zabezpečením a výkonem.
Služba je aktuálně nabízena ve třech plánech (Basic, Standard, Premium). Nejnižší Basic plán nemá definováno SLA, ostatní plány nebízejí dostupnost 99.99%. Pokud pro vývojáře není dostupnost cache kritická, mohu doporučit i nejnižší Basic plán.
Velkou výhodou Azure Redis Cache je podrobný přehled nad tím, co se v cache děje. Slouží k tomu diagnostiky, které si odlévají data do Blob Storage. Na základě diagnostik lze sledovat množství obsazené paměti, nebo například počty čtení a zápisů do cache.
Z hlediska množství prostředků má vývojář k dispozici 250 MB až 53 GB paměti. Premium plán nejvyšší hranici zdesetinásobuje na 0,5 TB.
Dne 3. prosince Microsoft oznámil přechod z preview verze do ostrého provozu s platností ceníku od 1. ledna 2016. Společně s tímto oznámením přišla oficiální informace o ukončení služeb Azure Managed Cache a In-Role Cache k 30. listopadu 2016. Podpora těchto služeb nicméně zmizí společně s novou verzí Azure SDK již v únoru 2016. Migraci mezi službami je věnována oficiální stránka přímo v dokumentaci MS Azure.
Práce s Redis Cache v .NETu
Pro práci s Redis Cache je nutné nejprve založit službu v prostředí nového portálu (od 3. 12. také oznámena GA) Microsoft Azure. Pro komunikaci s cache a správu dat je poté potřeba nainstalovat NuGet balíček:
PM> install-package StackExchange.Redis
Součástí instalovaného balíčku je třída ConnectionMultiplexer, díky které můžeme s Redis Cache komunikovat:
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("nazevcache.redis.cache.windows.net,ssl=true,password={key}");
Co se týče connection stringu předávaného metodě Connect(), upozornil bych jen na nešťastné názvosloví. Password je totiž dohledatelný v azure službě jako primární API key.
Za účelem sdílení připojení napříč aplikací je doporučeno uložit si connection například ve statické property:
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect("nazevcache.redis.cache.windows.net,ssl=true,password={key}");
});
public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
Pro základní práci s cache už nezbývá než se dotazovat na příslušná data:
IDatabase cache = Connection.GetDatabase();
cache.StringSet("klic", 25);
int klic = (int)cache.StringGet("klic");
Kromě primitivních typů lze cachovat i objekty, které musí být nejprve serializovány. Posloužit k tomu může tradiční Newtonsoft.Json.NET.
cache.StringSet("klic", JsonConvert.SerializeObject(new Article(25, "Title")));
Article article = JsonConvert.DeserializeObject<Article>(cache.StringGet("klic"));
Závěrem
Redis Cache poskytuje dále Session State Providera, který může nahradit standardní in-memory cache nebo SQL db. Pro vývoj webových aplikací se dále může hodit Output Cache Provider. Více o službě Redis Cache se lze dočíst na oficiální stránce.