La empresa Redis Ltd ha anunciado un cambio en la política de licencias del proyecto. A partir de la versión Redis 8.0, el código del proyecto estará disponible bajo la licencia abierta AGPLv3. El cambio a una licencia abierta fue posible gracias al regreso a la empresa de Salvatore Sanfilippo, el creador de la base de datos Redis. Después de su salida de Redis Ltd, Salvatore desarrolló un conjunto de extensiones vectoriales (Vector Sets), que estaba listo para integrar en Redis, pero quería que el código que había creado se distribuyera bajo una licencia abierta. Salvatore logró convencer a sus colegas sobre la conveniencia de restaurar la naturaleza abierta del proyecto y mejorar la interacción con la comunidad.
Rowan Trollope, director de Redis Ltd, declaró que la transición a licencias propietarias realizada el año pasado cumplió su objetivo, ya que las empresas AWS y Google crearon un fork, comenzaron a participar en el desarrollo colaborativo y a compartir sus desarrollos previos. Sin embargo, el cambio de licencias perjudicó las relaciones con la comunidad, las cuales la empresa intentará restaurar regresando a la entrega del código bajo una licencia abierta.
Después de pasar a licencias propietarias, el desarrollo de la base de código abierta de Redis continuó en forks como Valkey (un fork desarrollado con la participación de Amazon, Google, Oracle, Ericsson y Snap), Redict (un fork del autor de la interfaz de usuario Sway y el lenguaje Hare), Garnet (una base de datos de Microsoft compatible con Redis) y KeyDB (un fork de alto rendimiento de Redis 5 de Snapchat). En los repositorios de las distribuciones Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux y Alpine 3.20, el paquete Redis fue reemplazado por el fork Valkey.
Originalmente, Redis se ofrecía bajo la licencia permisiva BSD, que permitía no revelar modificaciones; luego pasó a licencias propietarias RSALv2 (Redis Source Available License v2) y SSPLv1 (Server Side Public License v1). Desde Redis 8, el código del proyecto está disponible bajo la licencia AGPLv3, que se caracteriza por tener restricciones para aplicaciones que operan servicios en red. Al usar componentes AGPL en redes, los desarrolladores están obligados a proporcionar al usuario el código fuente de todas las modificaciones realizadas en esos componentes, incluso si el software subyacente no se distribuye y se utiliza únicamente en la infraestructura interna para el funcionamiento de dicho servicio. La licencia AGPLv3 es compatible con GPLv3, pero es incompatible con GPLv2.
Las licencias SSPL y RSAL utilizadas anteriormente llevaron a la discriminación de ciertas categorías de usuarios, lo que no permitía considerarlas abiertas o libres. En cuanto a sus objetivos, ambas licencias son similares, y las diferencias residen en que la licencia SSPL se basa en la licencia copyleft AGPLv3, mientras que la licencia RSAL se basa en la licencia permisiva BSD. La licencia RSAL permite el uso, modificación, distribución e integración de código en aplicaciones, excepto cuando estas aplicaciones son comerciales o se utilizan para ofrecer servicios gestionados de pago. La licencia SSPL contiene adicionalmente la exigencia de entregar no solo el código de la aplicación misma bajo la misma licencia, sino también los textos fuente de todos los componentes involucrados en la prestación del servicio en la nube.
Junto con el anuncio del cambio de licencia, se presentó el lanzamiento de Redis 8.0. Sin embargo, a pesar del anuncio de disponibilidad del lanzamiento, en el repositorio solo hay un candidato a lanzamiento, y el enlace de descarga de Redis 8.0 en el sitio del proyecto lleva a una página con una descripción general del proceso de instalación. En la nota de lanzamiento, también se ha señalado hasta ahora solo el lanzamiento 8.0-RC1.
Los principales cambios en Redis 8.0:
- Se ha añadido un tipo para el almacenamiento de conjuntos de vectores, requerido en sistemas de aprendizaje automático y búsqueda semántica. Los conjuntos de vectores (vector set) amplían la funcionalidad previamente disponible de los conjuntos ordenados (sorted set) con la capacidad de almacenar vectores multidimensionales. Se han añadido 11 nuevos comandos para manipular datos vectoriales, como VADD, VREM y VSIM.
- Los módulos Redis Query Engine, JSON, Time Series y Probabilistic Data Types se han integrado en el núcleo de Redis, que anteriormente se proporcionaban como extensiones separadas de Redis Stack.
- Se ha integrado el soporte de la estructura de datos JSON, permitiendo almacenar documentos en formato JSON vinculados a claves en Redis. Para la extracción selectiva de documentos JSON y el acceso a elementos individuales, se puede utilizar el lenguaje de consultas JSONPath. Hay soporte para actualizaciones atómicas, permitiendo realizar cambios en campos individuales del documento JSON sin cargar todo el documento.
- Se ha añadido soporte para estructuras de datos en forma de series temporales (una grabación forma un momento y un conjunto de valores correspondientes a ese momento, por ejemplo, obtenidos a través de encuestas periódicas del estado de los sensores o recolección de métricas). Para reducir el consumo de memoria, se han utilizado algoritmos de compresión de dichos datos y se ha proporcionado la posibilidad de definir reglas de muestreo de datos archivados (downsampling).
- Se han añadido estructuras de datos probabilísticas: Bloom filter, Cuckoo filter, Count-min sketch, Top-k y t-digest, que permiten reducir significativamente el tamaño del almacenamiento cuando es necesario almacenar volúmenes de datos muy grandes a expensas de perder precisión en algunas operaciones. El "Bloom filter" y el "Cuckoo filter" permiten verificar la pertenencia a un conjunto, permitiendo falsos positivos para elementos ausentes, pero excluyendo la omisión de elementos existentes. El "Count-min sketch" predice el número de menciones de un valor en el conjunto. El "Top-k" permite encontrar los valores más frecuentes. El "T-digest" permite extraer valores mayores o menores a un dado.
- Se ha incluido el motor "Redis Query Engine" con soporte para búsqueda vectorial y capacidades para realizar muestreos basados en contenido, en lugar de por claves. Redis Query Engine permite crear índices adicionales para los datos almacenados en hashes y documentos JSON.
- Se ha ampliado el soporte de ACL (Listas de Control de Acceso), que permiten gestionar el acceso a los datos basándose en claves y que permiten definir diferentes conjuntos de reglas de acceso a comandos, con la posibilidad de vincular conjuntos de privilegios a cada usuario. Por ejemplo, mediante ACL se puede definir qué usuarios pueden conectarse a Redis, a qué claves tiene acceso cada usuario y qué comandos puede ejecutar. En Redis 8 se han añadido nuevas categorías de ACL para nuevas estructuras de datos.
- Se han añadido nuevos comandos para trabajar con hashes:
- HGETDEL — obtener y eliminar campos de un hash por la clave especificada.
- HGETEX — obtener campos de un hash por la clave especificada y establecer un tiempo de vida para ellos.
- HSETEX — establecer campos de un hash por la clave especificada y establecer un tiempo de vida para ellos.
- Se han realizado más de 30 optimizaciones de rendimiento, que en algunas pruebas llevan a una aceleración de la ejecución de comandos del 87%, un aumento de la capacidad de procesamiento del 112%, una aceleración de la replicación del 18% y una velocidad de consulta en el Motor de Consulta de Redis que llega a ser hasta 16 veces más rápida (gracias a la escalabilidad horizontal y vertical). Tras pasar un conjunto de 149 pruebas, 90 comandos se ejecutaron más rápido. La capacidad de procesamiento ha aumentado significativamente, gracias a la transición a un funcionamiento multihilo de los componentes para analizar comandos, procesar solicitudes de clientes, y leer y escribir en sockets de red. Se ha propuesto una nueva implementación del mecanismo de procesamiento multihilo de entrada/salida (io-threads).
- Se ha presentado un nuevo mecanismo de replicación, que consume un 35% menos de memoria y es un 18% más rápido. Para evitar bloqueos, se han utilizado dos hilos de replicación separados: uno para transmitir cambios al nodo principal y otro para transmitir cambios a nodos intermedios.
Para la gestión de datos en la base de datos Redis, se ofrecen comandos como incremento/decremento, operaciones estándar sobre listas y conjuntos (unión, intersección), renombrado de claves, múltiples selecciones y funciones de ordenación. Se soportan dos modos de almacenamiento: sincronización periódica de datos en disco y registro de cambios en el disco. En el segundo caso, se garantiza la plena conservación de todos los cambios. Se admiten transacciones que permiten ejecutar un conjunto de comandos en un solo paso, asegurando la coherencia y secuencialidad (los comandos de otras consultas no pueden intercalarse) durante la ejecución del conjunto de comandos determinado, y en caso de problemas, permiten revertir los cambios.
Es posible organizar la replicación de datos master-slave a varios servidores, realizada en modo no bloqueante. También está disponible el modo de mensajería 'publicación/suscripción', en el que se crea un canal, cuyos mensajes se distribuyen a los clientes suscritos. Todos los datos se almacenan por completo en la memoria RAM. Las bibliotecas de cliente están disponibles para la mayoría de los lenguajes populares, incluyendo Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go y C#.
Fuente: opennet.ru
