1. Předmluva
V poslední době byl Redis využíván jako cache v projektu pro usnadnění sdílení dat mezi více obchodními procesy. Protože jsou data Redis uložena v paměti, pokud není nastavena perzistence, všechna data budou po restartu Redis ztracena, takže musíte povolit funkci perzistence v Redisu, aby se data uložila na disk, a po restartu Redis můžete data z disku obnovit. Redis nabízí dva způsoby perpersistence: RDB persistence (princip spočívá v ukládání záznamů Reids do paměti do RDB persistence na disku) a druhý je AOF persistence (princip spočívá v zápisu Reidsových operačních logů do souboru ve formě přílohy). Jaký je tedy rozdíl mezi těmito dvěma metodami perzistence a jak se rozhodnout ho změnit? Většina věcí, které jsem četl na internetu, vysvětluje, jak tyto dvě metody konfigurovat a používat, ale není zde žádný úvod do rozdílu mezi nimi ani do toho, v jakých aplikačních scénářích použít.
2. Rozdíl mezi těmito dvěma
Persistence RDB znamená zápis snímku datové sady do paměti na disk v rámci stanoveného časového intervalu, přičemž skutečný provozní proces spočívá v odštěvení podprocesu, nejprve zápisu datové sady do dočasného souboru a následném nahrazení předchozího souboru po úspěšném zápisu a uložení s binární kompresí.
AOF perzistence zaznamenává každou operaci zápisu a mazání zpracovanou serverem ve formě logu, a operace dotazu nebude zaznamenána, ale zaznamenána v textu, a můžete soubor otevřít a zobrazit podrobný záznam operace.
3. Výhody a nevýhody obou
Jaké jsou výhody RDB?
1). Jakmile je toto využito, celá vaše databáze Redis bude obsahovat pouze jeden soubor, což je ideální pro zálohování souborů. Například můžete chtít archivovat posledních 24 hodin každou hodinu a také archivovat posledních 30 dní každý den. S takovou záložní strategií se můžeme snadno zotavit v případě katastrofálního selhání systému.
2). RDB je velmi dobrá volba pro obnovu po havárii. Protože můžeme snadno komprimovat jeden soubor a přenést ho na jiné úložné médium.
3). Maximalizovat výkon. U servisního procesu Redis je při spuštění persistence potřeba jen oddělit podprocesy, a pak tyto podprocesy dokončí tyto perzistenční úkoly, což může výrazně zabránit tomu, aby servisní proces prováděl IO operace.
4). Ve srovnání s mechanismem AOF, pokud je datová sada velká, bude startovací efektivita RDB vyšší.
Jaké jsou nevýhody RDB?
1). Pokud chcete zajistit vysokou dostupnost dat, tedy co nejvíce se vyhnout ztrátě dat, pak RDB nebude dobrou volbou. Protože jakmile systém vypadne před plánovanou perzistencí, data, která byla dříve zapsána na disk, se ztratí.
2). Protože RDB pomáhá s udržením dat prostřednictvím fork subprocesů, pokud je datová sada velká, může způsobit, že celý server přestane službu na stovky milisekund, nebo dokonce na 1 sekundu.
Jaké jsou výhody AOF?
1). Tento mechanismus může přinést větší bezpečnost dat, tedy jejich trvalost. V Redis jsou zde 3 synchronizační strategie: synchronizace za sekundu, synchronizace na modifikaci a desynchronizace. Synchronizace za sekundu je ve skutečnosti také asynchronní a její účinnost je velmi vysoká, rozdíl je v tom, že jakmile systém vypadne, upravená data se během této sekundy ztratí. A pokaždé, když je modifikace synchronizována, můžeme si ji představit jako synchronizační perzistenci, tedy každá změna dat je okamžitě zaznamenána na disk. Je předvídatelné, že tato metoda je nejméně efektivní. Co se týče absence synchronizace, není třeba říkat víc, myslím, že to každý správně chápe.
2). Protože mechanismus používá append režim pro zápis logů, i když během zápisu dojde k výpadku, obsah již existující v logu nebude zničen. Pokud ale zapíšeme jen polovinu dat a systém tentokrát spadne, nebojte se, můžeme použít nástroj redis-check-aof, který nám pomůže vyřešit problém konzistence dat před dalším spuštěním Redis.
3). Pokud je log příliš velký, Redis může automaticky povolit mechanismus přepisu. To znamená, že Redis průběžně zapisuje modifikační data do starého disku v režimu append a Redis také vytváří nový soubor, který zaznamenává, které modifikační příkazy jsou během této doby vykonány. Díky tomu lze bezpečnost dat lépe zaručit při přepínání mezi přepínáními.
4). AOF obsahuje jasný, snadno srozumitelný logovací soubor, který zaznamenává všechny úpravy. Ve skutečnosti můžeme také dokončit rekonstrukci dat prostřednictvím tohoto souboru.
Jaké jsou nevýhody OV?
1). Pro stejný počet datových sad jsou OF soubory obvykle větší než soubory RDB. RDB obnovuje velké datové sady rychleji než AOF.
2). V závislosti na synchronizační strategii bývá AOF pomalejší než RDB, pokud jde o efektivitu provozu. Stručně řečeno, efektivita politiky synchronizace za sekundu je relativně vysoká a efektivita synchronní politiky deaktivace je stejně efektivní jako u RDB.
Kritéria pro výběr těchto dvou jsou, zda je systém ochoten obětovat část výkonu výměnou za vyšší konzistenci cache (AOF), nebo zda je ochoten nepovolit zálohování výměnou za vyšší výkon při častých zápisných operacích, a pak provádět zálohování (RDB) při manuálním spouštění Uložení. RDB má konečnější a konzistentnější význam. Produkční prostředí je však ve skutečnosti spíše kombinací obojího.
4. Běžné konfigurace
Konfigurace perzistence RDB
Redis ukládá snímek datové sady do souboru dump.rdb. Kromě toho můžeme také upravit frekvenci snapshotů Redis serveru v konfiguračním souboru, po otevření souboru 6379.conf vyhledáme save a vidíme následující konfigurační informace:
AOF perzistentní konfigurace
V profilu Redis existují tři způsoby synchronizace, a to jsou:
Kompletní konfigurace:
Nový soubor "appendonly.aof" bude vytvořen v testovacím adresáři, a to následovně:
|