Objavljen je izdanak SDB-a Redis 7.0, koji pripada klasi NoSQL sustava. Redis pruža funkcije za pohranu podataka u formatu ključ/vrijednost, proširene podrškom za strukturirane formate podataka poput lista, hešira i skupova, kao i mogućnošću izvođenja skripti na strani poslužitelja na jeziku Lua. Kod projekta dostupan je pod BSD licencom. Dodatni moduli, koji nude napredne mogućnosti za korporativne korisnike kao što su RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, od 2019. godine isporučuju se pod proprietarnom licencom RSAL. Razvoj otvorenih varijanti podataka tih modula pod AGPLv3 licencom pokušao je nastaviti projekt GoodFORM, koji se posljednje vrijeme nalazi u stagnaciji.
Za razliku od sustava za pohranu u radnoj memoriji, kao što je Memcached, Redis osigurava trajnu pohranu podataka na disku i jamči očuvanje BDP-a u slučaju iznenadnog prekida rada. Izvorni kod projekta distribuiran je pod BSD licencom. Klijentske biblioteke dostupne su za većinu popularnih jezika, uključujući Perl, Python, PHP, Java, Ruby i Tcl. Redis podržava transakcije, koje omogućuju izvršavanje grupe komandi u jednom koraku, jamčeći konzistentnost i redoslijed (naredbe drugih zahtjeva ne mogu se umetnuti) izvršavanja zadanog skupa komandi, a u slučaju problema omogućava povratak promjena. Svi podaci u potpunosti se keširaju u radnoj memoriji.
Za upravljanje podacima dostupne su komande poput inkrementiranja/dekrementiranja, standardne operacije nad listama i skupovima (spajanje, presjek), preimenovanje ključeva, višestruka ispitivanja i funkcije sortiranja. Podržavaju se dva načina pohrane: periodična sinhronizacija podataka na disk i vođenje loga promjena na disku. U drugom slučaju osigurava se potpuna očuvanost svih promjena. Moguće je organizirati master-slave replikaciju podataka na nekoliko strežnikov, koja se vrši u neblokirajućem režimu. Također je dostupan režim razmjene poruka "objavljivanje/pretplata", pri čemu se stvara kanal čije se poruke šire klijentima putem pretplate.
Ključne promjene u Redis 7.0:
- Dodana je podrška za funkcije koje se izvršavaju na strani strežnika. Za razliku od prethodno podržanih skripti na jeziku Lua, funkcije nisu vezane uz aplikaciju i usmjerene su na implementaciju dodatne logike koja proširuje mogućnosti poslužitelja. Funkcije se obrađuju neodvojivo s podacima i u vezi s BDP-om, a ne s aplikacijom, uključujući repliciranje i čuvanje u trajnoj pohrani.
- Predlagana je druga revizija ACL, ki omogoča upravljanje dostopa do podatkov na podlagi ključev in omogoča določitev različnih nizov pravil dostopa do ukazov, s možnostjo povezave več selektorjev (nizov pooblastil) z vsakim uporabnikom. Vsak ključ je mogoče identificirati z določenimi pooblastili, na primer, dostop je mogoče omejiti le na branje ali pisanje določenega podmnožja ključev.
- Predstavljena je delujoča v klastru sekcionirana (sharded) implementacija paradigme distribucije sporočil po naročilu (Publish-Subscribe), pri kateri se sporočilo pošlje določenemu vozlišču, ki je povezano z višjem kanalom sporočil, po čemer se to sporočilo preusmeri ostalim vozliščem, ki so del sekcije (shard). Stranke lahko prejemajo sporočila po naročilu na kanal, tako da se povežejo z glavnim vozliščem kot tudi s sekundarnimi vozlišči sekcije. Upravljanje poteka s pomočjo ukazov SSUBSCRIBE, SUNSUBSCRIBE in SPUBLISH.
- Dodana je podpora za obdelavo podukazov v večini kontekstov.
- Dodani so novi ukazi:
- 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.
- Predstavljena je možnost hkratne obdelave več konfiguracij v enem klicu CONFIG SET/GET.
- V orodje redis-cli so dodane možnosti "--json", "-2", "--scan", "--functions-rdb".
- Privzeto je onemogočen dostop strankam do nastavitev in ukazov, ki vplivajo na varnost (na primer, onemogočeni so ukazi DEBUG in MODULE, prepovedano je spreminjanje konfiguracij z zastavico PROTECTED_CONFIG). V redis-cli je prenehan izhod v datoteko z zgodovino ukazov, ki vsebujejo zaupne podatke.
- Izvedenih je bilo veliko optimizacij, usmerjenih v povečanje zmogljivosti in zmanjšanje porabe pomnilnika. Na primer, znatno je zmanjšana poraba pomnilnika pri vklopu klasterskega načina, pri izvajanju operacij copy-on-write ter pri delu z hšenimi in ključnimi zseti. Izboljšana je logika ponastavitve podatkov na disk (klic fsync). Zmanjšano je število omrežnih paketov in pozivov k sistemskim klicem pri pošiljanju odgovorov strankam. Povečana je učinkovitost replikacije.
- Odpravljena je ranljivost CVE-2022-24735 v okolju za izvajanje Lua skript, ki omogoča vstavljanje lastne Lua kode in njeno izvajanje v kontekstu drugega uporabnika, vključno s tistimi z višjimi pooblastili.
- Odpravljena je ranljivost CVE-2022-24736, ki omogoča zrušitev procesa redis-server zaradi dereferenciranja ničelnega kazalca. Napad poteka preko nalaganja posebej oblikovanih Lua skript.
Izvor: opennet.ru
