sql >> Databáze >  >> NoSQL >> Redis

Redis vs. Memcached – srovnání roku 2021

Redis znamená RE mote DI slovník S erver, vytvořený v roce 2009 Salvatore Sanfilippo. Na druhou stranu Memcached vytvořil v roce 2003 Brad Fitzpatrick. Redis i Memcached jsou:

  • Datové struktury v paměti NoSQL
  • Napsáno v C
  • Otevřený zdroj
  • Slouží ke zrychlení aplikací
  • Podpora submilisekundové latence

V roce 2014 napsal Salvatore vynikající příspěvek StackOverflow o tom, kdy má větší smysl používat Memcached než Redis. V tomto příspěvku poskytujeme aktuální a podrobné srovnání mezi Redis a Memcached, abyste se mohli informovaně rozhodnout o jejich použití ve vaší aplikaci.

Infografika

Tento příspěvek byl zhuštěn do níže uvedené infografiky. Pomocí této infografiky si můžete snadno vizualizovat výsledky tohoto srovnání a zjistit, který z nich je v různých scénářích na vrcholu. Pokud si chcete srovnání přečíst v textovém formátu, klikněte sem.

Dokumentace

Pro začátek je Redis zdokumentován mnohem komplexněji než Memcached. To usnadňuje učení, správu a používání.

Databázový model

Redis je především úložištěm klíčových hodnot. Zatímco klíče jsou binární řetězce, výhodou Redis je, že hodnota není omezena pouze na binární řetězce. Mohou to být různé datové struktury, které umožňují ukládání složitých objektů a poskytují nad nimi bohatou sadu operací. Redis také poskytuje rozšiřitelnost prostřednictvím modulů Redis. Moduly Redis jsou rozšíření, která poskytují další datové struktury a funkce, které nejsou dostupné v základní sadě funkcí. Zde je ukázka několika funkcí, které jsou nyní dostupné jako moduly:

  • Dokumenty
  • Graf DBMS
  • Vyhledávač
  • Time Series DBMS

Memcached je úložiště hodnot prostého klíče, které jako hodnotu podporuje pouze binární řetězce.

Datové struktury

Jak bylo uvedeno výše, Redis nabízí několik typů datových struktur, které umožňují extrémně flexibilní použití, včetně řetězců, hashů, seznamů, sad, tříděných sad, bitmap, bitových polí, HyperLogLog, Geoprostorové indexy a proudy. Více se o nich můžete dozvědět v tomto článku Nejčastější případy použití Redis podle základních typů datových struktur.

Zdroj obrázku:https://redislabs.com/redis-enterprise/data-structures/

Memcached podporuje pouze prosté binární řetězce, které jsou skvělé pro data pouze pro čtení, takže pokud nepotřebujete všechny zvonky a píšťalky Redis, Memcached je pro vás jednodušší databáze použít.

Hodnocení a popularita databáze

Větší popularita databáze má za následek větší komunitu uživatelů, více diskuzí a uživatelsky vytvářených výukových programů a více pomoci a podpory prostřednictvím nástrojů třetích stran, jako jsou platformy DBaaS a analytické nástroje, které vám pomohou optimalizovat vaše nasazení.

Redis je k únoru 2021 podle DB-Engines 8. nejoblíbenější databází na světě kvůli své jednoduchosti, bohatým datovým strukturám a skvělé dokumentaci. Memcached je aktuálně hodnocena jako 28. nejoblíbenější databáze. Když jsou Redis a Memcached hodnoceny s ohledem na databázové modely klíč-hodnota, Redis je na 1. místě a Memcached na 4. místě. Pokud však hledáte pouze open source databázi klíč–hodnota nebo takovou, kterou lze nasadit on-premise, Memcached je na druhém místě, protože jak Amazon DynamoDB, tak Microsoft Azure Cosmos DB jsou komerční databáze, které lze nasadit pouze v cloud.

Architektura

Redis i Memcached sledují klient-server architektura. Klienti naplní data na serveru ve formě páru klíč–hodnota.

Redis je jednovláknový, kdežto na druhé straně Memcached má vícevláknovou architekturu. Memcached se lépe škáluje na systému s více jádry, která zvládnou více operací, pokud je škálována výpočetní kapacita. Na stejném systému však lze spustit více než jednu instanci Redis, aby bylo možné využít další jádra.

Snadné použití

Jak je vysvětleno výše v části Databázový model, Redis, jakožto multimodelová databáze, lze použít s libovolným typem datového modelu. V Redis je snadné psát kód, protože zjednodušuje složité úkoly. Redis má pokročilé datové struktury a není omezen na jednoduché řetězcové hodnoty. Například, pokud vaše aplikace ukládá data v sadách a chcete mít přehled o sadách v seznamu, můžete to snadno provést v Redis. Podobná úloha na Memcached není možná. Existují však i jiné způsoby, jak provádět stejné úkoly, které budou vyžadovat více řádků kódu.

Memcached na druhou stranu ukládá pouze hodnoty prostého řetězce. Aplikace se tedy musí vypořádat se složitostí datové struktury.

Rozdělení dat

Redis podporuje rozdělení dat mezi více instancemi uzlů. Současní uživatelé Redis využívají různé techniky, jako je dělení rozsahu, rozdělování hashů a konzistentní hašování pro dělení dat. V Redis lze dělení dat implementovat třemi různými způsoby:

  • Rozdělení na straně klienta
  • Rozdělování pomocí proxy (příklad:twemproxy)
  • Rozdělení na straně serveru se směrováním dotazů v rámci uzlů clusteru

Memcached také podporuje dělení dat mezi více uzly a doporučeným přístupem je konzistentní hašování, které zajistí rovnoměrné rozložení zátěže.

Redis vs Memcached – srovnání 2021Click To Tweet

Podporované jazyky

Redis podporuje téměř všechny nejpoužívanější programovací jazyky, od jazyků vysoké úrovně po jazyky nízké úrovně. Memcached však podporuje menší počet jazyků ve srovnání s Redis, ale podporuje všechny populární jazyky.

Memcached

  • .Net
  • C
  • C++
  • ColdFusion
  • Erlang
  • Java
  • Lisp
  • Lua
  • OCaml
  • Perl
  • PHP
  • Python
  • Ruby

Redis

  • C
  • C#
  • C++
  • Clojure
  • Křišťál
  • D
  • Šipka
  • Elixír
  • Erlang
  • Efektní
  • Jděte
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • Lisp
  • Lua
  • MatLab
  • Cíl-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prolog
  • Čistá data
  • Python
  • R
  • Rebol
  • Ruby
  • Rez
  • Scala
  • Schéma
  • Smalltalk
  • Rychlé
  • Tcl
  • Visual Basic

Transakce

Transakce Redis se provádějí se třemi níže uvedenými zárukami:

  • Transakce jsou serializovány a prováděny postupně
  • Buď jsou zpracovány všechny příkazy, nebo žádné (atomové transakce)
  • Optimistické zamykání nabízí extra záruku pomocí funkce check-and-set

Redis zajišťuje, aby byl najednou proveden pouze jeden příkaz z jednoho klientského počítače. Všechny příkazy v transakcích jsou provedeny, když je zavolán příkaz „EXEC“, aby byla zajištěna atomicita.

Memcached na druhou stranu neposkytuje správu transakcí.

Replikace

Redis nabízí jednoduchou replikaci vůdce-sledovník (master-slave), která vytváří přesné kopie hlavních instancí, s těmito funkcemi:

  • Master pokračuje v odesílání datových příkazů podřízenému, dokud jsou připojeny.
  • Pokud se spojení přeruší, podřízená jednotka provede částečnou resynchronizaci a pouze zkopíruje data, která při odpojování chyběla.
  • Pokud částečná resynchronizace není možná, pokusí se o úplnou resynchronizaci.

Můžete také využít funkce vysoké dostupnosti, Redis Sentinels nebo Redis Cluster, pro pokročilou ochranu proti selhání.

Native Memcached nepodporuje replikaci, ale můžete použít Repcached, bezplatnou opravu open source, abyste dosáhli vysoké dostupnosti pro své nasazení. Nabízí multi master replikaci, asynchronní replikaci dat a podporuje všechny příkazy Memcached.

Snímky/perzistence

Snímky jsou pouze zobrazením vaší databáze, jaká byla v určitém okamžiku, pouze pro čtení. Redis podporuje snímky a ve výchozím nastavení ukládá Redis snímky datové sady na disk do binárního souboru s názvem dump.rdb. Můžete ručně vyvolat snímek nebo upravit frekvenci nebo změnit práh pro spuštění operace.

Zde jsou dvě možnosti stálosti, které Redis podporuje:

  • Trvalost RDB
  • Trvalost AOF

RDB znamená „Redis Database Backup“. Jedná se o kompaktní snímek databáze v určitém čase v určitém okamžiku. Zabírá méně místa, maximalizuje výkon Redis a je vhodný pro obnovu po havárii.

AOF znamená „Připojit pouze soubor“. AOF sleduje všechny příkazy, které jsou provedeny, a v katastrofální situaci znovu provede příkazy, aby získal data zpět. Tato metoda zabírá více místa, protože se všechny příkazy provádějí znovu, a není příliš trvanlivou metodou snímkování.

Memcached na druhé straně nepodporuje persistenci na disku.

Skripty na straně serveru

Lua je vestavěný skriptovací jazyk pro váš server Redis, dostupný od verze 2.6, který vám umožňuje provádět operace uvnitř Redis za účelem zjednodušení kódu a zvýšení výkonu. Dvě hlavní funkce používané k vyhodnocování skriptů pomocí překladače Lua jsou:

  • EVAL
  • EVALSHA

Když je spuštěn skript Lua, všechny ostatní požadavky jsou blokovány, jak je znázorněno na obrázku níže.

Redis také obsahuje Lua scripts debugger ve verzi 3.2, který usnadňuje psaní složitých skriptů a pomáhá zvýšit výkon.

Memcached nepodporuje žádné skriptování na straně serveru.

Škálovatelnost

Existují dvě techniky pro horizontální škálování databáze Redis:

  • Přidávání fragmentů do Redis Clusters
  • Přidání uzlů do nastavení Redis HA (hlavní/replika)

Můžete také vertikálně škálovat nastavení Redis, když potřebujete více paměti nebo výpočetní kapacity. Lze to provést bez prostojů, pokud máte nastavení HA nebo používáte technologii Redis Cluster.

Server Memcached neposkytuje mechanismus pro distribuci dat mezi uzly (sharding). V Memcached je tedy horizontální škálovatelnost stejně jednoduchá jako přidání více uzlů – problém s rozdělením vašich dat na různé fragmenty bude muset být vyřešen na úrovni aplikace/klient. Existuje několik nástrojů s otevřeným zdrojovým kódem, které vám s tím mohou pomoci.

Komunikační protokol

Redis používá TCP jako síťový protokol a nepodporuje UDP.

Memcached podporuje komunikační protokoly TCP i UDP. Data jsou odesílána na server Memcached ve dvou formách:

  • Textové řádky:Odesílejte příkazy a přijímejte odpovědi ze serveru.
  • Nestrukturovaná data:Přijímá nebo odesílá informace o hodnotě pro daný klíč a data se vracejí ve stejném poskytnutém formátu.

Podporované zásady vyklizení mezipaměti

Redis podporuje různé typy zásad vystěhování. Pojďme se na některé podívat.

  • vyklizení:  V „noeviction“ je vrácena chyba, když paměť dosáhne hranice.
  • allkeys-lru:  Lru znamená „nejméně nedávno použité“. Tato zásada odstraní data, která byla naposledy použita.
  • allkeys-lfu:  Lfu znamená „nejméně často používané“. Tato zásada odstraní nejméně často používaná data.
  • allkeys-random:  Tato zásada odstraní data náhodně.
  • volatile-lru:  Nestálá data jsou s datovou sadou vypršení platnosti. Tato zásada odstraní nejméně nedávno použitá nestálá data.
  • volatile-lfu:  Nestálá data jsou s datovou sadou vypršení platnosti. Tato zásada odstraňuje nejméně často používaná nestálá data.
  • volatile-random:  Tato zásada náhodně odstraní nestálá data.
  • volatile-ttl:  „TTL“ znamená čas žít. Tato zásada odstraňuje data, jejichž životnost je nejkratší.

Memcached používá algoritmus LRU k odstranění dat, když je potřeba místo. Nejprve vyhledá data, která již vypršela, a smaže je, pokud data s prošlou platností nejsou dostupná, použije se algoritmus LRU.

Publikování a přihlášení k odběru zpráv

Redis podporuje zasílání zpráv Pub/Sub (publikovat a přihlásit se k odběru). K tomuto účelu se používají tři příkazy.

Klient používá:

  • Přihlásit se k odběru
  • Odhlásit odběr

Přihlášení k odběru a odhlášení odběru se používají k odběru zpráv z konkrétního kanálu.

Server používá:

  • Publikovat

„publikovat“ se používá k odesílání dat klientům.

Memcached nepodporuje publikování a odběr zpráv.

Podpora streamů

Redis podporuje streamy podobné Kafkovi s verzí 5.0 nebo vyšší pomocí nové datové struktury „Redis Streams“. Redis Streams má koncept spotřebitelských skupin, jako je Apache Kafka, který umožňuje klientským aplikacím přijímat zprávy distribuovaným způsobem, což usnadňuje škálování a vytváření vysoce dostupných systémů.

Memcached nenabízí nativní podporu pro streamy, ale existují nástroje knihovny s otevřeným zdrojovým kódem, jako je Kafcache pro zpracování streamů s nízkou latencí.

Geoprostorová podpora

Redis má datovou strukturu zvanou Geoprostorové indexy, která ukládá údaje o zeměpisné délce a šířce místa. S geoprostorovými daty můžete provádět různé operace, jako je výpočet vzdálenosti mezi dvěma body nebo hledání blízkých míst.

Memcached nemá žádné speciální datové struktury pro zpracování geoprostorových dat.

Výkon

Porovnání výkonu mezi datovými úložišti klíč–hodnota v paměti je spíše intelektuálním cvičením než praktickým významem – pokud nenasazujete systémy v takovém měřítku, že by to mohlo být zajímavé např. opatření pro úsporu nákladů. Je to proto, že taková úložiště jsou vázána na vstup a výstup a latence sítě může obvykle hrát větší roli v latenci vnímané aplikací než latence databáze.

Praktičtějším aspektem výkonu je efektivita úložiště – kolik dat lze zabalit do stejného množství paměti. I zde se vnitřní datové struktury používané Redis liší v závislosti na velikosti dat. Jakékoli diskuse o výkonu mezi těmito databázemi by se tedy měly brát se špetkou soli.

Podívejme se na některá srovnání uvedená ve výzkumu z roku 2016. V tomto článku autoři experimentují s široce používanými databázemi v paměti k měření jejich výkonu z hlediska:

  1. Čas potřebný k dokončení operací.
  2. Jak efektivně využívají paměť během operací.

Verze databáze použité v dokumentu:

Databáze Verze
Redis 3.0.7
Memcached 1.4.14

Operace zápisu

Při zápisu dat, jak můžete vidět, v tabulce níže Memcached ukazuje výjimečnou rychlost i poté, co se počet záznamů zvýší na milion.

Vypočítaný čas pro zápis párů klíč–hodnota (ms)

Počet záznamů
Databáze 1 000 10 000 100 000 1 000 000
Redis 34 214 1 666 14 638
Memcached 23 100 276 2 813

Přečtěte si operaci

Čtení dat zůstává v Redis téměř konzistentní i pro milion záznamů, ale v Memcached, jak počet záznamů narůstá, čas se také o něco prodlužuje.

Čas, který uplynul do načtení hodnoty odpovídající danému klíči na databázi (ms)

Počet záznamů
Databáze 1 000 10 000 100 000 1 000 000
Redis 8 6 8 8
Memcached 9 14 14 30

Využití paměti

Při diskuzi o využití paměti je Redis vždy nejlepší, jak můžete vidět na výsledcích.

Využití paměti databází v paměti pro operaci zápisu (MB)

Počet záznamů
Databáze 1 000 10 000 100 000 1 000 000
Redis 2,5 3,8 4.3 62,7
Memcached 5.3 27,2 211 264,9

Jak můžete vidět, Redis je lepší než Memcached.

Využití paměti databází v paměti pro operaci odstranění (MB)

Počet záznamů
Databáze 1 000 10 000 100 000 1 000 000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2

Spravované služby/podpora

Větší popularita a komunita Redis také vyvolala potřebu spravovaných služeb, hostingu a podpory. Mezi oblíbené poskytovatele spravovaných databází pro Redis™* patří ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache a DigitalOcean. Tato stránka poskytuje skvělé srovnání nejlepších poskytovatelů pro Redis™. Redis má také rozsáhlé interní nástroje pro vytváření sestav, jako jsou přístupy do mezipaměti, využití paměti, operace a dokonce i pomalé protokolování dotazů.

Spravované služby pro Memcached jsou mnohem méně dostupné, ale stále jsou podporovány prostřednictvím Amazon Elasticache.

Podpora TLS (Transport Layer Security)

Redis má od verze Redis 6.0 nativní podporu TLS. Dřívější verze Redis doporučovaly používat stunnel pro poskytování podpory TLS.

Memcached 1.5.13 a vyšší verze podporují ověřování a šifrování prostřednictvím TLS. Tato funkce je stále ve fázi experimentu.

Ověření

Až do Redis 5.x podporoval Redis pouze jednoduché ověřování založené na hesle. Toto heslo bylo uloženo v prostém textu na serveru. Redis ve verzi 6.0 a novější podporuje plně funkční ACL.

Memcached verze 1.4.3 a vyšší má podporu SASL. Dříve Memcached neměl žádnou ověřovací vrstvu.

Shrnutí

Redis a Memcached jsou skvělé a mají uplatnění v různých oblastech. Později vyvíjený Redis má mnoho pokročilých funkcí a má skvělou dokumentaci a komunitu.

Chcete se dozvědět více o ScaleGrid?

Chcete-li se dozvědět více o tom, jak vám ScaleGrid Hosting for Redis™* může pomoci se správou vašich databází, podívejte se na naši stránku ScaleGrid Service for Redis™. Podívejte se, jak vám hosting ScaleGrid pro Redis™ může umožnit soustředit se více na vývoj vašeho produktu a méně na správu databází.

*Redis je ochranná známka společnosti Redis Labs Ltd. Veškerá práva v ní obsažená jsou vyhrazena společnosti Redis Labs Ltd. Jakékoli použití ScaleGrid je pouze pro referenční účely a neznamená žádné sponzorství, podporu nebo přidružení mezi Redis a ScaleGrid.


  1. řešení situací redis maxmemory s raily při použití rails cachingu

  2. jak mohu předat nekonečno do redis z pythonu?

  3. Redis SortedSet:Jak získat hodnoty v číselném pořadí, nikoli v abecedním pořadí, když dvě hodnoty mají stejné skóre?

  4. Rozdělit řetězec podle znaku v Lua