Miroslav Holec
Premium

10 funkcí v Redis, které musí každý vývojář znát

Miroslav Holec   28. srpna 2017

Tento článek je již zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Redis je vývojářským světem často považována pouze za primitivní cache. Ve skutečnosti je ale mnohem mocnější a nabízí celou řadu zajímavých funkcí, které její využití řádově zvyšují. V tomto článku představím výběr desítky z nich.

1. Single-Threaded

Je to fakt a má to svá velká pro. Všechny požadavky v Redis jsou zpracovány sekvenčně tak, jak je server přijme. V kombinaci s datovým typem string a režimem NX (Create if not exists) lze Redis použít pro vytváření a správu zámků. A co více, existuje na to skvělá knihovna RedLock.Net.

2. Podpora LRU a LFU cache

Redis lze přidělit určité množství paměti a nad ní aktivovat vybranou Eviction Policy. Po zaplnění cache lze tak automaticky odstraňovat klíče, které jsou nejdéle nepoužité nebo nejméně přistupované a toto pravidlo aplikovat buď na všechny klíče nebo jen ty, které mají nastavený TTL (time to live).

Eviction Policies

3. Šest praktických datových typů

Kromě stringů podporuje Redis i další datové typy: List, Hash, Set, Sorted Set a HyperLogLog. Každý datový typ má jiné využití, pro které zpřístupňuje operace s obvykle konstantní, logaritmickou nebo při nejhorším lineární časovou složitostí. Redis je přímo navržená pro použití jako fronta, zásobník, sestavování TOP něčeho, průniky množin, tvorba komplexních struktur aj.

Přehled datových typů

4. Message Broker a Keyspace Notifications

Redis podporuje i Publisher/Subscriber pattern. Lze tak snadno posílat zprávy mezi různými klienty nebo v kombinaci s funkcí Redis Keyspace Notifications sledovat změny v datech v Redis a reagovat na ně například synchronizací do pomalejších úložišť.

5. Pipelining

Knihovna StackExchange.Redis pro .NET vývojáře podporuje pipelining (implementováno pomocí async/await). Díky němu lze efektivně komunikovat s Redis serverem a řádově tak zvýšit propustnost celé aplikace. Při pipeliningu jsou odesílány požadavky bez čekání na odpověď na každý samostatný požadavek. Vedle toho je možné odesílat do Redis požadavky v režimu Fire-and-Forget, díky čemuž se vůbec na výsledek požadavku nečeká.

6. Jednoduché zabezpečení

Redis je navržena pro běh v důvěryhodném prostředí a komunikaci důvěryhodných klientů. Přesto je možné nastavit autorizační klíč, který klient musí zadat pro přístup do Redis. Pokud vývojář používá službu Azure Redis, má k dispozici dva klíče (primární a sekundární).

7. Dva typy perzistence dat

Přestože jsou Redis data uložená v operační paměti (díky čemuž je mimo jiné Redis tak rychlá), je možné data odlévat i na disk. Vybrat si lze z režimu RDB (otisk celé paměti) nebo AOF (log se všemi operacemi). Tyto metody je možné kombinovat a díky nim lze Redis dostat do posledního známého stavu v případě selhání.

Persistence

8. Redis jako distributed cache v ASP.NET Core

Přestože je ASP.NET Core relativně nová technologie, podporuje Redis vedle SQL Serveru jako jednu z možností distribuované cache. Pro nastavení stačí pár řádků kódu a kouzelný Nuget balíček.

9. Transakce a WATCH

Pokud chcete zaručit, že se sada příkazů odbaví společně bez toho, aniž by byla narušena jinými klienty, lze použít Redis transakce. Příkazy se pak vykonají atomicky a sekvenčně tak, tak jak dorazily na server. I když Redis nepodporuje žádné rollbacky, poskytuje užitečnou funkci WATCH. Díky té lze zahodit transakce, pokud byl zvenčí změněn určitý sledovaný klíč.

10. Sčítač HyperLogLog

Zajímavý datový typ HyperLogLog umí sčítat unikátní prvky do speciálního bufferu. Speciální je v tom, že data se ukládají úsporným způsobem a buffer pojme až 18 quintilionů prvků (což je fakt hodně nul). Malou daní je pak přesnost této struktury, která se pohybuje s chybou kolem 0,81 %.

Přednáška Úvod do Redis a praktické návrhové vzory

Chcete se dozvědět o Redis více? Přijďte na čtvrteční přednášku v Microsoftu, kde se více rozpovídám o Redis funkcích a praktickém využití v běžném webovém světě.