È stato pubblicato il rilascio del DBMS Redis 7.0, appartenente alla categoria dei sistemi NoSQL. Redis offre funzionalità per la memorizzazione dei dati in formato chiave/valore, ampliate dal supporto per formati di dati strutturati, come liste, hash e insiemi, nonché la possibilità di eseguire script handler sul server utilizzando il linguaggio Lua. Il codice del progetto è rilasciato sotto licenza BSD. Moduli aggiuntivi che offrono funzionalità avanzate per gli utenti aziendali, come RediSearch, RedisGraph, RedisJSON, RedisML, e RedisBloom, sono dal 2019 forniti sotto licenza proprietaria RSAL. Il progetto GoodFORM ha tentato di continuare lo sviluppo di varianti aperte di questi moduli sotto licenza AGPLv3, ma è attualmente in stagnazione.
A differenza dei sistemi di memorizzazione in memoria come Memcached, Redis offre una persistenza dei dati su disco, garantendo la sicurezza del database in caso di arresto anomalo. I codici sorgente del progetto sono distribuiti sotto licenza BSD. Le librerie client sono disponibili per la maggior parte dei linguaggi di programmazione più popolari, tra cui Perl, Python, PHP, Java, Ruby e Tcl. Redis supporta le transazioni, consentendo di eseguire un insieme di comandi in un solo passaggio, garantendo coerenza e sequenzialità (i comandi di altre richieste non possono interferire) nell'esecuzione di quel set di comandi e, in caso di problemi, permettendo di annullare le modifiche. Tutti i dati sono completamente memorizzati nella memoria.
Per gestire i dati, sono disponibili comandi come incremento/decremento, operazioni standard su liste e set (unione, intersezione), rinominare chiavi, selezioni multiple e funzioni di ordinamento. Sono supportati due modalità di archiviazione: sincronizzazione periodica dei dati su disco e mantenimento di un log delle modifiche su disco. In quest'ultimo caso, è garantita la completa integrità di tutte le modifiche. È possibile organizzare la replica master-slave dei dati su più server, eseguita in modalità non bloccante. È disponibile anche la modalità di messaggistica "pubblicazione/sottoscrizione", in cui viene creato un canale, i cui messaggi vengono distribuiti ai clienti in base alla sottoscrizione.
Modifiche chiave in Redis 7.0:
- Aggiunta il supporto per funzioni eseguite lato server. A differenza degli script precedentemente supportati in Lua, le funzioni non sono legate all'applicazione e mirano a implementare logiche aggiuntive che ampliano le capacità del server. Le funzioni sono elaborate in modo integrato con i dati e in relazione al database, e non all'applicazione, incluse nella replica e conservate in storage permanente.
- È stata proposta una seconda versione dell'ACL, che consente la gestione dell'accesso ai dati basata su chiavi e permette la definizione di diversi set di regole di accesso per i comandi, con la possibilità di collegare più selettori (set di autorizzazioni) a ciascun utente. Ogni chiave può essere associata a specifiche autorizzazioni, ad esempio, si può limitare l'accesso in sola lettura o in scrittura a un determinato sottoinsieme di chiavi.
- È stata fornita un'implementazione sharded della paradigma di messaggistica Publish-Subscribe operante in cluster, in cui un messaggio viene inviato a un nodo specifico legato a un canale di messaggi, e successivamente questo messaggio viene inoltrato agli altri nodi appartenenti alla sezione (shard). I clienti possono ricevere messaggi iscrivendosi al canale sia collegandosi al nodo principale che ai nodi secondari della sezione. La gestione avviene tramite i comandi SSUBSCRIBE, SUNSUBSCRIBE e SPUBLISH.
- È stato aggiunto il supporto per l'elaborazione dei sottocomandi nella maggior parte dei contesti.
- Sono stati aggiunti nuovi comandi:
- 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.
- È stata fornita la possibilità di gestire più configurazioni in un'unica chiamata CONFIG SET/GET.
- Sono state aggiunte le opzioni «—json», «-2», «—scan», «—functions-rdb» all'utilità redis-cli.
- Per impostazione predefinita, l'accesso ai client alle impostazioni e ai comandi che influiscono sulla sicurezza è disabilitato (ad esempio, sono disabilitati i comandi DEBUG e MODULE e non è consentita la modifica delle configurazioni con il flag PROTECTED_CONFIG). In redis-cli è cessata l'uscita su file con la cronologia dei comandi contenenti dati riservati.
- È stata effettuata una vasta serie di ottimizzazioni mirate a migliorare le prestazioni e ridurre il consumo di memoria. Ad esempio, è stato notevolmente ridotto il consumo di memoria durante l'attivazione della modalità cluster, durante le operazioni di copy-on-write e nell'operare con hash e chiavi zset. È stata migliorata la logica di persistenza dei dati su disco (chiamata fsync). È stata ridotta la quantità di pacchetti di rete e di chiamate ai sistemi durante l'invio delle risposte al client. È stata aumentata l'efficienza della replicazione.
- Risolto il problema di sicurezza CVE-2022-24735 nell'ambiente di esecuzione per script Lua, che consentiva l'inserimento di codice Lua personalizzato e la sua esecuzione nel contesto di un altro utente, anche di uno con privilegi più elevati.
- Risolto il problema di sicurezza CVE-2022-24736, che consentiva il crash del processo redis-server a causa della dereferenziazione di un puntatore nullo. L'attacco avviene tramite il caricamento di script Lua appositamente formati.
Fonte: opennet.ru
