Redis Ltd ha annunciato una modifica della propria politica di licenza. A partire dal rilascio di Redis 8.0, il codice del progetto sarà disponibile sotto la licenza libera AGPLv3. Il passaggio a una licenza aperta è stato reso possibile dal ritorno in azienda di Salvatore Sanfilippo, il creatore del database Redis. Dopo la sua partenza da Redis Ltd, Salvatore ha sviluppato un set di estensioni vettoriali (Vector Sets), che era pronto a integrare in Redis, ma desiderava che il codice da lui creato fosse fornito sotto una licenza aperta. Salvatore è riuscito a convincere i suoi 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 alle licenze proprietarie dello scorso anno ha raggiunto il suo obiettivo, poiché le aziende AWS e Google hanno creato un fork, iniziato a partecipare allo sviluppo congiunto e a condividere i propri lavori passati. Tuttavia, il cambio di licenza ha danneggiato i rapporti con la comunità, che la società cercherà ora di ripristinare tornando a fornire il codice sotto una licenza libera.
Dopo il passaggio alle licenze proprietarie, lo sviluppo della base di codice open source 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 DBMS di Microsoft compatibile con Redis) e KeyDB (un fork altamente performante 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 era fornito sotto una licenza permissiva BSD, che consentiva di non rilasciare le proprie modifiche, poi è 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, la cui caratteristica è la presenza di restrizioni per le applicazioni che forniscono servizi di rete. Utilizzando componenti AGPL nel funzionamento di 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 alla base del servizio non viene distribuito e viene utilizzato esclusivamente nell'infrastruttura interna 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 fino ad ora hanno portato a discriminazioni di categorie specifiche di utenti, il che non ha permesso di considerarli aperti o liberi. Per obiettivi, entrambe le licenze sono simili, mentre le differenze sono che la licenza SSPL si basa sulla licenza copyleft AGPLv3, mentre la licenza RSAL si basa sulla licenza permissiva BSD. La licenza RSAL consente di utilizzare, modificare, distribuire e integrare il codice nelle applicazioni, a meno che queste applicazioni non siano commerciali o utilizzate per fornire servizi a pagamento gestiti. La licenza SSPL contiene inoltre il requisito di fornire non solo il codice stesso dell'applicazione, ma anche i testi sorgente di tutti i componenti coinvolti nella fornitura del servizio cloud sotto la stessa licenza.
Contemporaneamente all'annuncio del cambio di licenza, è stato rilasciato Redis 8.0. Tuttavia, nonostante l'annuncio della disponibilità del rilascio, nel repository è attualmente disponibile solo il candidato al rilascio, e il link per scaricare Redis 8.0 sul sito del progetto rimanda a una pagina con una descrizione generale del processo di installazione. Nella nota di rilascio è anche attualmente riportato solo il rilascio 8.0-RC1.
Le principali novità in Redis 8.0:
- È stato aggiunto un tipo per la memorizzazione di set di dati vettoriali, richiesti nei sistemi di machine learning e ricerca semantica. I set vettoriali (vector set) estendono la funzionalità precedentemente disponibile degli elenchi ordinati (sorted set), consentendo la memorizzazione di vettori multidimensionali. Sono state aggiunte 11 nuove comandi per la manipolazione dei dati vettoriali, come VADD, VREM e VSIM.
- Sono stati integrati nel core di Redis i moduli Redis Query Engine, JSON, Time Series e Probabilistic Data Types, precedentemente forniti sotto forma di estensioni separate di Redis Stack.
- È stata integrata la supporto per la struttura dati JSON, che consente di memorizzare documenti in formato JSON legati a chiavi in Redis. Per l'estrazione selettiva di documenti JSON e l'accesso a singoli elementi, può essere utilizzato il linguaggio di query JSONPath. È presente un supporto per l'aggiornamento atomico, che consente di apportare modifiche a singoli campi di un documento JSON senza dover caricare l'intero documento.
- È stata aggiunta la supporto per strutture dati in forma di serie temporali (la registrazione forma il tempo e un insieme di valori corrispondenti a quel tempo, ad esempio, ottenuti tramite un sondaggio periodico dello stato dei sensori o la raccolta di metriche). Per ridurre il consumo di memoria, sono stati impiegati algoritmi di compressione di tali dati e fornita la possibilità di definire regole di campionamento dei dati archiviati (downsampling).
- Sono state aggiunte strutture dati probabilistiche: Bloom filter, Cuckoo filter, Count-min sketch, Top-k e t-digest, che permettono di ridurre significativamente la dimensione di archiviazione quando si devono conservare grandi volumi di dati a scapito della precisione durante l'esecuzione di alcune operazioni. Il Bloom filter e il Cuckoo filter consentono di verificare l'appartenenza a un insieme, ammettendo una falsa determinazione di un elemento mancante, escludendo però l'omissione di un elemento esistente. Count-min sketch prevede il numero di occorrenze di un valore in un insieme. Top-k permette di identificare i valori più frequentemente ricorrenti. T-digest consente di eseguire campionamenti di valori, superiori o inferiori a quelli specificati.
- È stato incluso il motore 'Redis Query Engine' con supporto per la ricerca vettoriale e funzionalità per generare campionamenti basati sul contenuto, non sulle chiavi. Redis Query Engine consente di creare indici aggiuntivi per i dati memorizzati in hash e documenti JSON.
- È stata ampliata la supporto per le ACL (Access Control Lists), che consentono di gestire l'accesso ai dati basato su chiavi e permettono di definire diversi set di regole di accesso ai comandi, con la possibilità di legare i set di autorizzazioni a ciascun utente. Ad esempio, tramite le ACL è possibile stabilire 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 — restituisce e rimuove i campi dell'hash in base alla chiave specificata.
- HGETEX — restituisce i campi dell'hash in base alla chiave specificata e ne definisce il tempo di vita.
- HSETEX — imposta i campi dell'hash in base alla chiave specificata e ne definisce il tempo di vita.
- Sono state implementate oltre 30 ottimizzazioni delle prestazioni, che in alcuni test portano a un'accelerazione dell'esecuzione dei comandi fino all'87%, un aumento della capacità di elaborazione del 112%, un'accelerazione della replicazione del 18% e un'accelerazione del campionamento nel Redis Query Engine fino a 16 volte (grazie allo scaling orizzontale e verticale). Durante un set di 149 test, 90 comandi sono stati eseguiti più velocemente. La capacità di elaborazione è aumentata notevolmente grazie alla transizione a un'architettura multithread dei componenti per il parsing dei comandi, il trattamento delle richieste dei clienti, la lettura e la scrittura nei socket di rete. È stata proposta una nuova implementazione del meccanismo di elaborazione multithread di input/output (io-threads).
- È stato introdotto un nuovo meccanismo di replicazione, che consuma il 35% in meno di memoria e opera il 18% più velocemente. Per evitare il blocco, sono stati coinvolti due thread di replicazione separati: uno per il trasferimento delle modifiche al nodo principale e l'altro per il trasferimento delle modifiche ai nodi intermedi.
Per la gestione dei dati nel DBMS Redis sono disponibili comandi come incremento/decremento, operazioni standard su liste e insiemi (unione, intersezione), rinominazione delle chiavi, campionamenti multipli 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. Nel secondo caso, viene garantita la piena conservazione di tutte le modifiche. Sono supportate le transazioni, che consentono di eseguire in un'unica operazione un gruppo di comandi, garantendo coerenza e sequenzialità (i comandi da altre richieste non possono interferire) nell'esecuzione del set di comandi specificato, permettendo di annullare le modifiche in caso di problemi.
È possibile organizzare la replicazione master-slave dei dati su più server, realizzata in modalità non bloccante. È inoltre disponibile la modalità di messaggistica 'pubblicazione/sottoscrizione', in cui viene creato un canale, le cui comunicazioni vengono diffuse ai clienti abbonati. Tutti i dati vengono interamente memorizzati nella memoria volatile. Le librerie client sono disponibili per la maggior parte dei linguaggi di programmazione più diffusi, tra cui Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go e C#.
Fonte: opennet.ru
