Z dalšího experimentování s tím a čtení o redis persistenci si myslím, že lze učinit následující pozorování:
- Při použití RDB (výchozí nastavení) se redis při každém
save
rozvětví spouští se operace, která je (ve výchozím nastavení) nastavena na každých 15 minut minimálně . Když se provádí více zápisů do Redis, pak jsou zápisy RDB tak časté jako jednou za 60 sekund . - Každá větev bude používat alokaci paměti "copy-on-write", což znamená, že i když se paměť ve skutečnosti nezdvojnásobí, objeví se to u nástrojů jako
ps
,htop
a podobně. - Fork sám o sobě může být poměrně náročná operace na CPU, zejména na virtuálních hostitelích založených na xenu (což je to, co v současnosti používáme).
- Zdá se, že operace zápisu úplně přepisuje existující soubor RDB. Nezapisuje pouze změny, ale spíše vypisuje celé datovou sadu na disk.
Takže na skromném virtuálním hostiteli se 4Gb RAM a datovým souborem kolem 750Mb (v době, kdy jsem otázku vkládal), to začíná být poněkud „drahé“. Pozorovali jsme ty skokové nárůsty CPU/paměti, stejně jako zvýšený IO, a to i při poměrně mírném zatížení / využití redis.
Takže abych odpověděl na svou vlastní otázku – zdá se, že toto je „očekávané“ chování.
Pokud jde o zlepšení situace, rozhodli jsme se přepnout naši konfiguraci na kombinaci RDB a AOF. Zdá se, že AOF (Append Only File) zapisuje pouze změny na disk. Stále můžete (a měli byste) nakonfigurovat soubor AOF tak, aby přepisoval (pomocí auto-aof-rewrite-percentage
a auto-aof-rewrite-min-size
nastavení). Pro snímky je také vhodné stále používat RDB. V této konfiguraci však pravděpodobně můžete provádět úplné přepisy / snímky méně často a stále si zachováte docela dobrý výkon a ještě lepší trvanlivost.