10 funkcí v Redis, které musí každý vývojář znát
Tento článek byl napsán v roce 2017. 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.
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).
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.
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í.
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 %.