Byl zveřejněn nový release databázového systému Redis 7.0, který spadá do kategorie NoSQL systémů. Redis poskytuje funkce pro ukládání dat ve formátu klíč/hodnota, rozšířené o podporu strukturovaných formátů dat, jako jsou seznamy, hash a množiny, a také umožňuje vykonávání serverových skriptů v jazyce Lua. Kód projektu je distribuován pod licencí BSD. Další moduly, které nabízejí rozšířené možnosti pro podnikové uživatele, jako jsou RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, jsou od roku 2019 distribuovány pod proprietární licencí RSAL. Vývoj otevřených variant těchto modulů pod licencí AGPLv3 se snažil pokračovat projekt GoodFORM, který se v poslední době nachází ve stagnaci.
Na rozdíl od systémů pro ukládání v paměti, jako je Memcached, Redis zajišťuje trvalé ukládání dat na disku a garantuje bezpečnost databáze v případě havarijního vypnutí. Zdrojové kódy projektu jsou distribuovány v rámci licence BSD. Klientské knihovny jsou dostupné pro většinu populárních jazyků, včetně Perl, Python, PHP, Java, Ruby a Tcl. Redis podporuje transakce, které umožňují provést skupinu příkazů v jednom kroku a zaručují konzistenci a sekvencí (příkazy z jiných požadavků nemohou zasahovat) vykonávání zadaného souboru příkazů, a v případě problémů umožňuje vrátit změny zpět. Všechna data jsou plně cacheována v paměti.
Pro správu dat se poskytují příkazy jako inkrementace/dekrementace, standardní operace nad seznamy a množinami (sjednocení, průnik), přejmenování klíčů, vícenásobné výběry a funkce pro řazení. Podporovány jsou dva režimy ukládání: periodická synchronizace dat na disk a vedení logu změn na disku. V druhém případě je zaručena úplná ochrana všech změn. Je možné organizovat replikaci dat v režimu master-slave na několik servery, prováděnou bez blokování. K dispozici je také režim výměny zpráv „publikace/předplatné“, při kterém se vytváří kanál, ze kterého jsou zprávy šířeny předplatitelům.
Klíčové změny v Redis 7.0:
- Byla přidána podpora funkcí vykonávaných na straně serveru. Na rozdíl od dříve podporovaných skriptů v jazyce Lua, funkce nejsou vázány na aplikaci a zaměřují se na realizaci dodatečné logiky, která rozšiřuje možnosti serveru. Funkce jsou zpracovávány neoddělitelně s daty a v rámci databáze, nikoli aplikace, včetně replikace a ukládání do trvalého úložiště.
- Byla navržena druhá revize ACL, která umožňuje řízení přístupu k datům na základě klíčů a zahrnuje definici různých sad pravidel přístupu k příkazům s možností přiřazení několika selektorů (souborů oprávnění) k jednotlivým uživatelům. Každý klíč může být identifikován s konkrétními oprávněními, například lze omezit přístup pouze pro čtení nebo zápis určitého podmnožství klíčů.
- Byla poskytnuta funkční implementace distribuované (sharded) architektury v clusteru pro paradigmatu publikování o odběru (Publish-Subscribe), kde je zpráva odeslána konkrétní uzlu, ke kterému je přidružen kanál zpráv, po čemž je tato zpráva předána dalším uzlům v dané sekci (shard). Klienti mohou přijímat zprávy prostřednictvím odběru kanálu, a to jak připojením k hlavnímu uzlu, tak k sekundárním uzlům sekce. Správa probíhá pomocí příkazů SSUBSCRIBE, SUNSUBSCRIBE a SPUBLISH.
- Byla přidána podpora zpracování podpříkazů ve většině kontextů.
- Byly přidány nové příkazy:
- ZMPOP, BZMPOP.
- LMPOP, BLMPOP.
- SINTERCARD, ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- EXPIRETIME, PEXPIRETIME.
- EVAL_RO, EVALSHA_RO, SORT_RO.
- FUNCTION *, FCALL, FCALL_RO.
- COMMAND DOCS, COMMAND LIST.
- LATENCY HISTOGRAM.
- CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
- CLIENT NO-EVICT.
- ACL DRYRUN.
- Byla poskytnuta možnost zpracování několika konfigurací najednou v jednom volání CONFIG SET/GET.
- Do nástroje redis-cli byly přidány možnosti „—json“, „-2“, „—scan“, „—functions-rdb.“
- Ve výchozím nastavení je klientům zakázán přístup k nastavením a příkazům, které ovlivňují bezpečnost (například jsou zakázány příkazy DEBUG a MODULE, změna konfigurací s ochranným příznakem PROTECTED_CONFIG). V redis-cli byla zastavena možnost ukládání historie příkazů, které obsahují citlivé údaje, do souboru.
- Bylo provedeno velké množství optimalizací zaměřených na zvýšení výkonu a snížení spotřeby paměti. Například byla výrazně snížena spotřeba paměti při aktivaci režimu clusteru, při provádění operací copy-on-write a při práci s hashi a klíči zset. Byla zlepšena logika ukládání dat na disk (volání fsync). Bylo sníženo množství síťových paketů a systémových volání při odesílání odpovědí klientovi. Efektivita replikace byla zvýšena.
- Byla odstraněna zranitelnost CVE-2022-24735 v prostředí pro spuštění Lua skriptů, která umožnila vkládání vlastního Lua kódu a jeho provádění v kontextu jiného uživatele, včetně toho s vyššími privilegii.
- Byla odstraněna zranitelnost CVE-2022-24736, která umožnila havárii procesu redis-server v důsledku dereferencování nulového ukazatele. Útok se provádí prostřednictvím načtení speciálně vytvořených Lua skriptů.
Zdroj: opennet.ru
