Miroslav Holec
Premium

Neodolatelně rychlá a výkonná. Taková je Azure Redis Cache

Miroslav Holec   1. srpna 2016  update 1. srpna 2016

Tento článek byl napsán v roce 2016. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Pokud potřebujete cachovat data v multitenantním prostředí, Azure Redis Cache poskytuje přístup k zabezpečené vyhrazené paměti s velmi nízkou latencí a vysokou propustností a spolehlivostí.

Co je Azure Redis Cache

Principielně se jedná o velmi rychlé úložiště typu klíč/hodnota založené na mezipaměti Redis. Klíče v Redis Cache mohou držet nejrůznější datové struktury od primitivních typů a řetězců přes různé kolekce (hashsety, řazené seznamy atd.).

Velikost paměti se pohybuje od 250 MB až po 53 GB v plánu Standard, případě až 530 GB v Premium. Dostupná šířka pásma se dle cenových plánů pohybuje od 5 Mb/s až do 2000 Mb/s v úrovni Standard s propustností 600 - 150000 requestů za sekundu. Premium plány poskytují šířku pásma až 4000 Mb/s při propustnosti až 250000 requestů za sekundu.

Cenové úrovně Azure Redis Cache

Už dle zmíněných hodnot je zřejmé, že Azure Redis Cache je oproti jiným druhům úložišť výrazně výkonnější, což má logický dopad na cenu. Z hlediska cen jsou nabízené 3 základní úrovně.

Basic

Úroveň vhodná pro menší aplikace, které nevyžadují replikaci dat a SLA. Nejnižší plán za 14 EUR / měsíc poskytuje prostor 250 MB na data a umožňuje připojení až 256 klientů v jeden okamžik.

Standard

Pokud vyžadujete replikaci dat s garantovanou dostupností tří devítek, pak je potřeba sáhnout po plánu Standard. Kromě replikace nabízí plán stejné technické parametry jako Basic.

Premium

V plánu Premium je poskytován i u nejlevnější varianty vyšší výkon Redis Cache a dostupné jsou tři zajímavé funkce: Persistence, Cluster a Virtual Network. Persistence umožňuje trvale uchovávat data nebo pořizovat snímky paměti a vytvářet zálohy, které lze později obnovit. Cluster Redis umožňuje rozdělovat data mezi více uzlů a dosáhnout tak většího prostoru (až 530 GB). Poslední zmíněné *Virtual Networks *poskytují izolaci Redis Cache v rámci vlastní Azure infrastruktury (vlastní zásady řízení přístupu) a tím i vyšší bezpečnost.

Diagnostika Cache

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.

Dostupnost pro různé jazyky

Stejně jako řadu jiných služeb v Azure lze i Redis Cache využívat v různých jazycích a prostředích. Kromě .NET aplikací lze cache implementovat například v Javě nebo Pythonu.

Práce s Redis Cache v .NETu

Pro práci s Redis Cache je nutné nejprve založit službu v prostředí portálu. Pro komunikaci s cache a správu dat je poté potřeba nainstalovat NuGet balíček:

PM> install-package StackExchange.Redis

Azure Redis Cache SDK

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í/sekundá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 je velmi jednoduchá ale výkonná služba se všemi typickými výhodami cloudu od škálování, replikace a zaručené bezpečnosti až po dokonalý přehled skrze volně dostupné diagnostické informace. Azure Redis Cache pomůže v případě, kdy je potřeba cachovat data, ke kterým je intenzivně přistupováno s důrazem na nízkou latenci a vysokou propustnost.