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

Redis – co, proč a jak používat Redis jako primární databázi

Toto je psaná verze mého nového videa na youtube ✍️ 🙂

V tomto tutoriálu Redis se dozvíte o Redis a jak lze Redis použít jako primární databázi pro složité aplikace které potřebují ukládat data ve více formátech.

Přehled 📝

  1. Co je Redis a jeho použití a také proč je vhodný pro moderní komplexní mikroservisní aplikace?
  2. Jak Redis podporuje ukládání více formátů dat pro různé účely prostřednictvím svých modulů ?
  3. Jak může Redis jako databáze v paměti zachovat data a obnovit je po ztrátě dat ?
  4. Jak škálovat a replikovat Redis ?
  5. Nakonec, protože jednou z nejoblíbenějších platforem pro provozování mikroslužeb je Kubernetes a protože spouštění stavových aplikací v Kubernetes je trochu náročné, uvidíme, jak můžete snadno spustit Redis v Kubernetes

Co je Redis?

Redis znamená re mote dic tionary s erver

Redis je databáze v paměti . Mnoho lidí ji tedy použilo jako mezipaměť nad jinými databázemi ke zlepšení výkonu aplikace. 🤓

Mnoho lidí však neví, že Redis je plnohodnotná primární databáze které lze použít k uložení a zachování více datových formátů pro složité aplikace. 😎

Pojďme se tedy podívat na případy použití.

Proč vícemodelová databáze?

Podívejme se na běžné nastavení pro aplikaci mikroslužeb.

Řekněme, že máme komplexní aplikaci sociálních médií s miliony uživatelů. K tomu možná budeme muset uložit různé formáty dat v různých databázích:

  1. Relační databáze , jako je Mysql, k ukládání našich dat
  2. ElasticSearch pro rychlé vyhledávání a filtrování
  3. Databáze grafů reprezentovat spojení uživatelů
  4. Databáze dokumentů , jako je MongoDB k ukládání mediálního obsahu sdíleného našimi uživateli denně
  5. Služba mezipaměti pro lepší výkon aplikace

Je zřejmé, že se jedná o poměrně složité nastavení.

Problémy s více datovými službami

  • ❌ Každá datová služba musí být nasazena a udržována
  • ❌ Know-How potřebné pro každou datovou službu
  • ❌ Různé požadavky na škálování a infrastrukturu
  • ❌ Složitější aplikační kód pro interakci se všemi těmito různými databázemi
  • ❌ Vyšší latence (pomalejší) kvůli většímu přeskakování sítě

Mít databázi více modelů

Ve srovnání s multimodelovou databází vyřešíte většinu těchto problémů. Nejprve spustíte a spravujete pouze 1 datovou službu . Vaše aplikace tedy také potřebuje hovořit s jedním úložištěm dat a to vyžaduje pouze jedno programové rozhraní pro tuto datovou službu.
Kromě toho bude latence snížena přechodem na jeden datový koncový bod a odstraněním několika interních síťových rozbočovačů.

Takže mít jednu databázi, jako je Redis, která vám umožňuje ukládat různé typy dat nebo v podstatě umožňuje mít více typů databází v jedné a zároveň fungovat jako mezipaměť, řeší takové problémy.

  • ✅ Provozujte a udržujte pouze 1 databázi
  • ✅ Jednodušší
  • ✅ Snížená latence (rychlejší)

Jak Redis funguje?

Moduly Redis 📦
Funguje to tak, že máte Redis Core, což je úložiště klíčových hodnot který již podporuje ukládání více typů dat a poté můžete toto jádro rozšířit o takzvané moduly pro různé typy dat , které vaše aplikace potřebuje pro různé účely. Takže například RediSearch pro funkce vyhledávání, jako je ElasticSearch nebo Redis Graph pro ukládání dat grafů a tak dále:

A skvělé na tom je, že je modulární . Tyto různé typy databázových funkcí tedy nejsou těsně integrovány do jedné databáze, ale spíše si můžete vybrat a vybrat přesně, kterou funkcionalitu datových služeb potřebujete pro svou aplikaci, a poté v podstatě přidat tento modul.

Předběžná mezipaměť ⚡️
Při použití Redis jako primární databáze samozřejmě nepotřebujete další mezipaměť, protože ji máte u Redis automaticky po vybalení. To opět znamená menší složitost vaší aplikace, protože nemusíte implementovat logiku pro správu naplňování a znehodnocování mezipaměti.

Redis je rychlý 🚀
Jako in-memory (data jsou uložena v RAM) databáze je Redis super rychlý a výkonný, což samozřejmě zrychluje samotnou aplikaci.

Ale v tuto chvíli vás může zajímat:
Jak může databáze v paměti uchovávat data? 🤔

Jak může Redis uchovat data a obnovit je po ztrátě dat? 🧐

Pokud selže proces Redis nebo server, na kterém Redis běží, všechna data v paměti jsou pryč? Jak jsou tedy data uchována a jak v podstatě mohu mít jistotu, že jsou moje data v bezpečí? 👀

Replikujete Redis?

No, nejjednodušší způsob, jak mít zálohy dat, je replikovat Redis . Pokud tedy hlavní instance Redis selže, repliky budou stále spuštěny a budou mít všechna data. Takže pokud máte replikovaný Redis, repliky budou mít data.

Ale samozřejmě, pokud všechny instance Redis selžou, ztratíte data, protože nezůstane žádná replika. 🤯 Takže potřebujeme skutečnou vytrvalost .

Snímání a AOF

Redis má několik mechanismů pro uchování dat a jejich uchování v bezpečí.

Snímky

První:snímky, které můžete konfigurovat podle času, počtu požadavků atd. Takže snímky vašich dat budou uloženy na disku , kterou můžete použít k obnovení dat, pokud je celá databáze Redis pryč.

Pamatujte však, že přijdete o poslední minuty dat , protože snímky obvykle provádíte každých pět minut nebo hodinu v závislosti na vašich potřebách. 😐

AOF

Redis tedy jako alternativu používá něco, co se nazývá AOF , což znamená A ppend O pouze F ile.

V tomto případě se každá změna uloží na disk, aby byla trvale zachována . A při restartování Redis nebo po výpadku Redis znovu přehraje protokoly Append Only File, aby znovu sestavil stav.

Takže AOF je odolnější , ale může být pomalejší než pořizování snímků.

Nejlepší možnost 💡 :Použijte kombinaci AOF a snímků, kde AOF nepřetržitě uchovává data z paměti na disk a mezi nimi máte pravidelné snímky pro uložení stavu dat pro případ, že je budete potřebovat obnovit:

Jak škálovat databázi Redis?

Řekněme, že mé 1 instanci Redis dojde paměť, takže data budou příliš velká na to, aby je udržela v paměti, nebo se Redis stane úzkým hrdlem a nemůže zpracovat žádné další požadavky. Jak v takovém případě zvýším kapacitu a velikost paměti pro moji databázi Redis? 🤔

Máme k tomu několik možností:

1. Shlukování

Za prvé, Redis podporuje shlukování . To znamená, že můžete mít primární nebo hlavní instanci Redis, kterou lze použít ke čtení a zápisu dat, a můžete mít několik replik této primární instance pro čtení dat :

Tímto způsobem můžete škálovat Redis, aby zvládl více požadavků a navíc zvýšil vysokou dostupnost vaší databáze, protože pokud hlavní selže, 1 z replik může převzít kontrolu a vaše databáze Redis může v podstatě bez problémů fungovat dál.

2. Sharding

To se zdá být dost dobré, ale co když

  1. vaše datová sada je příliš velká, aby se vešla do paměti na jediném serveru .
  2. Navíc jsme škálovali čtení v databázi, takže všechny požadavky, které v podstatě pouze dotazují data. Ale naše hlavní instance je stále sama a stále musí zpracovávat všechny zápisy .

Jaké je zde tedy řešení? 🤔

K tomu používáme koncept sharding , což je obecný koncept v databázích a který podporuje i Redis.

Takže sharding v podstatě znamená, že vezmete kompletní soubor dat a rozdělíte jej na menší části nebo podmnožiny dat , kde každý fragment odpovídá za svou vlastní podmnožinu dat.

To tedy znamená, že místo jedné hlavní instance, která zpracovává všechny zápisy do kompletní datové sady, ji můžete rozdělit na řekněme 4 fragmenty, z nichž každý je zodpovědný za čtení a zápis do podmnožiny dat . 💡

A každý fragment také potřebuje menší kapacitu paměti , protože mají jen čtvrtinu dat. To znamená, že můžete distribuovat a spouštět fragmenty na menších uzlech a v zásadě škálovat svůj cluster horizontálně:

Tedy mít více uzlů , na kterých běží více replik z Redis, které jsou všechny střepy vám poskytuje velmi výkonnou a vysoce dostupnou databázi Redis, která dokáže zpracovat mnohem více požadavků bez vytváření překážek 👍

Další témata...

Podívejte se na mé video níže s posledními 2 tématy a scénáři:

  1. Aplikace, které vyžadují ještě vyšší dostupnost a výkon v různých geografických oblastech
  2. Novým standardem pro provozování mikroslužeb je platforma Kubernetes, takže spouštění Redis v Kubernetes je velmi zajímavý a běžný případ použití

Celé video je k dispozici zde:🤓

Doufám, že to bylo pro některé z vás užitečné a zajímavé! 😊

To se mi líbí, sdílejte a sledujte mě 😍 pro další obsah:

  • Instagram – zveřejňování mnoha věcí ze zákulisí
  • Soukromá FB skupina
  • LinkedIn

  1. Meteor vrací chybu neplatného hexadecimálního řetězce při pokusu o vytvoření ObjectID?

  2. pymongo:název 'ISODate' není definován

  3. Index v MongoDB

  4. Vytvořte reaktivní publikaci s dalšími poli v každém dokumentu