L'azienda Redis Ltd ha annunciato un cambiamento nella politica di licenza del progetto. A partire dal rilascio di Redis 8.0, il codice del progetto è diventato disponibile sotto la licenza libera AGPLv3. Il passaggio a una licenza aperta è stato reso possibile grazie al ritorno in azienda di Salvatore Sanfilippo, il creatore del database Redis. Dopo la sua partenza da Redis Ltd, Salvatore ha sviluppato un insieme di estensioni vettoriali (Vector Sets), che era pronto a trasferire nella piattaforma Redis, ma desiderava che il codice da lui creato fosse fornito sotto licenza aperta. Salvatore è riuscito a convincere i colleghi dell'opportunità di ripristinare la natura aperta del progetto e migliorare l'interazione con la comunità.
Rowan Trollope, direttore di Redis Ltd, ha dichiarato che il passaggio avvenuto l'anno scorso a licenze proprietary ha raggiunto il suo obiettivo, poiché le aziende AWS e Google hanno creato un fork, hanno iniziato a partecipare allo sviluppo collaborativo e a condividere le loro precedenti realizzazioni. Tuttavia, il cambiamento di licenze ha danneggiato i rapporti con la comunità, che ora l'azienda cercherà di ripristinare tornando a fornire il codice sotto una licenza libera.
Dopo il passaggio a licenze proprietary, lo sviluppo della base di codice aperto di Redis è continuato nei fork Valkey (un fork sviluppato con la partecipazione di Amazon, Google, Oracle, Ericsson e Snap), Redict (un fork dell'autore della shell utente Sway e del linguaggio Hare), Garnet (un database da Microsoft compatibile con Redis) e KeyDB (un fork ad alte prestazioni di Redis 5 di Snapchat). Nei repository delle distribuzioni Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux e Alpine 3.20 il pacchetto Redis è stato sostituito dal fork Valkey.
Inizialmente, Redis è stato distribuito con una licenza permissiva BSD, che consentiva di non rendere pubbliche le proprie modifiche. Successivamente è passato a licenze proprietarie RSALv2 (Redis Source Available License v2) e SSPLv1 (Server Side Public License v1). A partire da Redis 8, il codice del progetto è disponibile sotto la licenza AGPLv3, che presenta come caratteristica la presenza di restrizioni per le applicazioni che forniscono servizi di rete. Quando si utilizzano componenti AGPL nei servizi di rete, lo sviluppatore è obbligato a fornire all'utente il codice sorgente di tutte le modifiche apportate a questi componenti, anche se il software sottostante al servizio non è distribuito e viene utilizzato esclusivamente nella propria infrastruttura per organizzare il funzionamento del servizio. La licenza AGPLv3 è compatibile con GPLv3, ma è in conflitto con la licenza GPLv2.
Le licenze SSPL e RSAL utilizzate in precedenza portavano a una discriminazione di categorie specifiche di utenti, rendendo difficile considerarle aperte o libere. Per scopi, entrambe le licenze si assomigliano, mentre le differenze riguardano il fatto che la licenza SSPL si basa sulla licenza copyleft AGPLv3 e la licenza RSAL si basa sulla licenza permissiva BSD. La licenza RSAL consente di utilizzare, modificare, distribuire e integrare il codice nelle applicazioni, tranne nei casi in cui tali applicazioni siano commerciali o utilizzate per fornire servizi a pagamento gestiti. La licenza SSPL contiene inoltre il requisito di fornire non solo il codice dell'applicazione stessa sotto la stessa licenza, ma anche i testi sorgente di tutti i componenti coinvolti nella fornitura del servizio cloud.
Contemporaneamente all'annuncio del cambio di licenza è stata presentata la versione Redis 8.0. Tuttavia, nonostante l'annuncio della disponibilità della release, nel repository è attualmente disponibile solo un candidato per la release, e il link per il download di Redis 8.0 sul sito del progetto porta a una pagina con una descrizione generale del processo di installazione. Nelle note di rilascio è attualmente menzionato solo il rilascio 8.0-RC1.
Le principali modifiche in Redis 8.0:
- Aggiunto un tipo per lo stoccaggio di insiemi di dati vettoriali, richiesti nei sistemi di machine learning e ricerca semantica. Gli insiemi vettoriali (vector set) estendono la funzionalità precedentemente disponibile delle liste ordinate (sorted set) con la possibilità di memorizzare vettori multidimensionali. Sono state aggiunte 11 nuove comandi per la manipolazione dei dati vettoriali, come VADD, VREM e VSIM.
- Nel core di Redis sono stati trasferiti i moduli Redis Query Engine, JSON, Time Series e Probabilistic Data Types, precedentemente forniti in forma di estensioni separate di Redis Stack.
- Integrato il supporto per la struttura dati JSON, che consente di salvare documenti in formato JSON associati a chiavi in Redis. Per l'estrazione selettiva di documenti JSON e l'accesso a singoli elementi è possibile utilizzare il linguaggio di query JSONPath. È presente il supporto per aggiornamenti atomici, che consentono di apportare modifiche a singoli campi del documento JSON senza caricare l'intero documento.
- Aggiunto il supporto per le strutture dati sotto forma di serie temporale (una registrazione forma tempo e un insieme di valori corrispondenti a quel tempo, ad esempio, ottenuti attraverso un'interrogazione periodica dello stato dei sensori o la raccolta di metriche). Per ridurre il consumo di memoria sono stati utilizzati algoritmi di compressione di tali dati e fornita la possibilità di definire regole per il campionamento dei dati storici (downsampling).
- Aggiunte strutture dati probabilistiche: Bloom filter, Cuckoo filter, Count-min sketch, Top-k e t-digest, che consentono di ridurre significativamente le dimensioni dello storage quando si tratta di gestire volumi molto grandi di dati, a scapito della precisione in alcune operazioni. Il "Bloom filter" e il "Cuckoo filter" permettono di verificare l'inclusione in un insieme, ammettendo un falso positivo, ma escludendo il mancato riconoscimento di un elemento esistente. Il "Count-min sketch" stima il numero di occorrenze di un valore in un insieme. Il "Top-k" consente di trovare i valori più frequentemente ripetuti. Il "T-digest" permette di eseguire campionamenti di valori superiori o inferiori a un parametro stabilito.
- Incluso il motore "Redis Query Engine" con supporto per la ricerca vettoriale e funzionalità per la generazione di campioni basati sul contenuto anziché sulle chiavi. Redis Query Engine consente di creare indici aggiuntivi per i dati memorizzati in hash e documenti JSON.
- È stata ampliata la supporto per ACL (Access Control Lists), che gestisce l'accesso ai dati in base alle chiavi e permette di definire diversi set di regole di accesso ai comandi, consentendo di associare i set di privilegi a ciascun utente. Ad esempio, tramite le ACL, è possibile determinare quali utenti possono connettersi a Redis, a quali chiavi ha accesso un utente e quali comandi può eseguire. In Redis 8 sono state aggiunte nuove categorie di ACL per le nuove strutture dati.
- Sono stati aggiunti nuovi comandi per lavorare con gli hash:
- HGETDEL — restituire e rimuovere i campi di un hash per la chiave specificata.
- HGETEX — restituire i campi di un hash per la chiave specificata e indicare il loro tempo di vita.
- HSETEX — impostare i campi di un hash per la chiave specificata e indicare il loro tempo di vita.
- Sono state apportate oltre 30 ottimizzazioni delle prestazioni, che in alcuni test portano a un'accelerazione dell'esecuzione dei comandi fino all'87%, a un aumento della capacità di elaborazione del 112%, a un'accelerazione della replica del 18% e a un'accelerazione delle query nel Redis Query Engine fino a 16 volte (grazie alla scalabilità orizzontale e verticale). Svolgendo un insieme di 149 test, 90 comandi hanno iniziato a essere eseguiti più rapidamente. La capacità di elaborazione è aumentata notevolmente grazie al passaggio a un'operatività multi-thread per i componenti dedicati al parsing dei comandi, all'elaborazione delle richieste dei clienti, alla lettura e scrittura nei socket di rete. È stata proposta una nuova implementazione del meccanismo di gestione multi-thread dell'input/output (io-threads).
- È stato presentato un nuovo meccanismo di replicazione, che consuma il 35% di memoria in meno e funziona più velocemente del 18%. Per evitare blocchi, sono stati utilizzati due thread di replicazione separati: uno per trasferire le modifiche al nodo principale e l'altro per trasferire le modifiche ai nodi intermedi.
Per gestire i dati nel DBMS Redis, sono disponibili comandi come incremento/decremento, operazioni standard su elenchi e set (unione, intersezione), rinominare le chiavi, selezioni multiple e funzioni di ordinamento. Sono supportati due modalità di archiviazione: sincronizzazione periodica dei dati su disco e registrazione delle modifiche su disco. Nel secondo caso, viene garantita la completa integrità di tutte le modifiche. Sono supportate le transazioni, che permettono di eseguire in un singolo passaggio un gruppo di comandi, garantendo coerenza e sequenzialità (i comandi di altre richieste non possono interferire) nell'esecuzione di un determinato insieme di comandi e, in caso di problemi, consentono di annullare le modifiche.
È possibile organizzare la replica dei dati master-slave su più server, effettuata in modalità non bloccante. È disponibile anche la modalità di messaggistica "pubblicazione/abbonamento", nella quale viene creato un canale, i cui messaggi vengono distribuiti ai clienti in base all'abbonamento. Tutti i dati vengono completamente memorizzati nella memoria RAM. Le librerie client sono disponibili per la maggior parte dei linguaggi popolari, tra cui Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go e C#.
Fonte: opennet.ru
