È stato pubblicato il rilascio del DBMS Redis 8.2, una soluzione del tipo NoSQL. Redis offre funzionalità per la memorizzazione dei dati in formato chiave/valore, ampliato dal supporto per formati di dati strutturati, come liste, hash e insiemi, oltre alla possibilità di eseguire script di elaborazione lato server in linguaggio Lua. Il codice del progetto è scritto in linguaggio C ed è distribuito sotto licenza AGPLv3.
Il DBMS Redis supporta le transazioni, consentendo di eseguire un gruppo di comandi in un'unica operazione, garantendo coerenza e sequenzialità (le comandi di altre richieste non possono interferire) durante l'esecuzione del set di comandi designato, e permettendo di annullare le modifiche in caso di problemi. Tutti i dati vengono completamente memorizzati in cache nella memoria volatile. Le librerie client sono disponibili per la maggior parte dei linguaggi popolari, inclusi Perl, Python, PHP, Java, Ruby e Tcl.
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.
Principali novità in Redis 8.2:
- Sono state ottimizzate oltre 70 istruzioni, che ora funzionano più velocemente rispetto a Redis 8.0. Ad esempio, l'istruzione BITCOUNT è diventata più veloce del 35%, mentre le istruzioni per le operazioni sulle liste LINSERT, LREM e LPOS sono migliorate del 25%. 17 delle istruzioni ottimizzate sono diventate più veloci di almeno il 5%, mentre 52 di almeno il 2%.

- Sono state effettuate ottimizzazioni nel codice per la gestione delle operazioni concorrenti e dell'input/output multithread, consentendo di aumentare del 49% il numero di operazioni elaborate al secondo nei test con 8 flussi di input/output, con una distribuzione del carico del 20% di richieste di scrittura e 80% di lettura. In uno di questi test server si è riusciti a superare il traguardo di 1 milione di operazioni elaborate al secondo.

- È stato radicalmente modificato il metodo di archiviazione dei dati nel formato chiave/valore: ora viene utilizzata una struttura unificata kvobj per memorizzare il nome della chiave, un valore breve e il tempo di vita in un unico blocco di memoria allocata, evitando così di utilizzare riferimenti separati per chiavi, dati e TTL nelle tabelle hash. La nuova metodologia di archiviazione ha permesso una riduzione del consumo di memoria del 25-37% per le stringhe brevi.

- Ottimizzazione della memorizzazione dei dati in formato JSON, che ha permesso di ridurre il consumo di memoria dal 25% al 67% nella memorizzazione di numeri interi e numeri con virgola mobile.
- Nel meccanismo Streams, utilizzato per l'elaborazione e la memorizzazione di flussi di messaggi, sono state aggiunte nuove comandi XACKDEL e XDELEX, semplificando il lavoro con i flussi a cui sono collegati più destinatari (gruppi di consumatori). Questi comandi risolvono il problema della rimozione di un messaggio solo dopo che la sua ricezione è stata confermata da tutti i gestori.
- Sono stati aggiunti nuovi operatori logici DIFF, DIFF1, ANDOR e ONE al comando BITOP, progettato per eseguire operazioni bitwise.
- Aggiunto un nuovo tipo di indici vettoriali SVS-VAMANA, che supportano la compressione dei vettori.
- Sono state aggiunte nuove metriche: carico per singoli slot e distribuzione delle dimensioni delle chiavi per i tipi di dati di base.
Fonte: opennet.ru



