Redis je NoSQL in-memory key-value úložiště. Umožňuje vytvářet atomické operace nad vestavěnými datovými typy. Nejedná se o nástroj na cachování, ale o komplexní úložiště, které lze využít zároveň jako fronta, zásobník nebo message broker. Vzhledem k tomu, že je Redis dostupný i jako Azure služby, je možné ji používat jako distribuovanou mezipaměť, která má nízkou latenci, vysokou propustnost a dostupnost.

Rozdíly oproti jiným databázovým systémům

Redis zpopularizoval myšlenku, že systém může být považován zároveň za úložiště i cache, používat design, kde data jsou neustále upravovaná i čtená z hlavní paměti počítače, ale také jsou ukládána na disk ve formátu, který není vhodný pro náhodný přístup k datům, ale pouze za účelem rekonstrukce dat z paměti po restartu systému.

Zároveň Redis poskytuje datový model, který je v porovnání s jinými RDBM systémy velmi atypický, kde uživatelské příkazy nepopisují dotaz do databáze, ale specifické operace, které jsou spouštěny na daných abstraktních datových typech. Data tak musí být ukládána způsobem, který je vhodný pro následné rychlé vyvolání bez pomoci databázového systému ve formě druhotných indexů, agregací nebo jiných obvyklých funkcí RDBM.

Implementace Redis bohatě využívá Fork k duplikaci procesů držení dat, takže rodičovský proces pokračuje ve službě klientům, zatímco dceřiný proces vytváří kopii dat na disk.

Persistence

Redis obvykle drží celou datovou sadu ve své paměti. Některé verze je možné nakonfigurovat na to, co Redis označuje za virtuální paměť. V takovém případě je datová sada uložena na disk. Persistence je tak dosažena dvěma způsoby. Jedním způsobem je takzvaný snaphotting a má polopersistentní trvanlivostní mód, kdy je datová sada asynchronně předána z paměti na disk ve formátu RDB. Od verze 1.1 je implementována bezpečnější alternativa AOF, který funguje jako operace modifikující datovou sadu v paměti. Redis dokáže přepisovat AOF soubory na pozadí, tak aby se vyhnul neustálému růstu zabraného místa.

Redis defaultně píše data do systému souborů nejméně každé dvě vteřiny, s více i méně robustními možnostmi, které je možné nastavit podle potřeby. V případě kompletního selhání systému jsou při defaultním nastavení ztracena data pouze za posledních několik vteřin.

Výhody použití Redis

  • Možnost uložení velkých key-value dvojic. Redis umožňuje uložení key-value dvojic až do velikosti 512 MB. Je tedy v rámci jediného vstupu přidat až 1 GB dat.
  • Vlastní hashing mechanismus. Redis má vlastní hahing mechanismus, který se nazývá Redis Hashing. Ukládá data ve formě klíče a mapy, tedy string pole a string hodnoty.
  • Replikace dat. Redis lze použít k vytvoření efektivní replikace v jakoukoliv chvíli. Cache služba tak bude k dispozici, i když by jeden z otročích uzlů nebyl dostupný. Uzly jsou rezilientní a dokážou tak překonat výpadky.
  • Má klienty v mnoha populárních programovacích jazycích. Redis má klientská API dostupná v mnoha populárních programovacích jazycích, jako je C, Ruby, Java, JavaScript nebo Python.
  • Ukládání velkého množství dat do cache. Někdy je potřeba načíst miliony řádků dat do cache během krátké chvíle. Mass insertion, kterou Redis podporuje, tuto situaci dokáže vyřešit.
  • Podpora pro Raspberry Pi nebo ARM. Redis lze naistalovat i na Raspberry Pi a umožňuje tak IoT aplikace.
  • Jednoduchý protokol. Redis protokol umožňuje jednoduchou implementaci klienta. Redis klient komunikuje se serverem za pomoci RESP (Redis Serialization Protocol). Tento protokol je jednoduché implementovat a je lidsky velmi čitelný.
  • Podpora transakcí. Redis podporuje transakce, je tedy možné zařadit příkazy do fronty místo jejich vykonávání jedné po druhé.

Nevýhody použití Redis

  • Jedná se o in-memory úložiště. Všechna data se tak musí do úložiště vměstnat.
  • Absence dotazovacího jazyka. Neexistuje dotazovací jazyk, ale pouze příkazy a nemá podporu relační algebry.
  • Bezpečnost. Ani jedno z obou řešení persistence není tak bezpečné jako opravdový transakční server. Má také jen základní bezpečnost na úrovni instancí.