Foi lançado o Redis 7.0, um sistema de gerenciamento de banco de dados do tipo NoSQL. O Redis oferece funcionalidades para armazenar dados no formato chave/valor, com suporte adicional para formatos de dados estruturados, como listas, hashes e conjuntos, além da possibilidade de executar scripts de manipuladores em lua no lado do servidor. O código do projeto é distribuído sob a licença BSD. Módulos adicionais que oferecem recursos avançados para usuários corporativos, como RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, são fornecidos desde 2019 sob a licença proprietária RSAL. O desenvolvimento de versões abertas desses módulos sob a licença AGPLv3 foi tentado pelo projeto GoodFORM, que recentemente está em estagnação.
Ao contrário dos sistemas de armazenamento em memória, como o Memcached, o Redis garante o armazenamento persistente de dados no disco e a integridade do banco de dados em caso de falhas. Os códigos fonte do projeto são distribuídos sob a licença BSD. Bibliotecas clientes estão disponíveis para a maioria das linguagens populares, incluindo Perl, Python, PHP, Java, Ruby e Tcl. O Redis suporta transações que permitem executar um conjunto de comandos em uma única etapa, garantindo a consistência e a sequência (comandos de outras requisições não podem interferir) na execução do conjunto de comandos designado, e em caso de problemas permite reverter as alterações. Todos os dados são totalmente armazenados em memória.
Para o gerenciamento de dados, são fornecidos comandos como incremento/decremento, operações padrão em listas e conjuntos (união, interseção), renomeação de chaves, seleções múltiplas e funções de ordenação. Dois modos de armazenamento são suportados: sincronização periódica de dados no disco e manutenção de um log de alterações no disco. No segundo caso, é garantida a preservação completa de todas as alterações. É possível organizar replicação de dados master-slave em vários servidores, realizada em modo não bloqueante. Também está disponível o modo de troca de mensagens 'publicação/inscrição', onde um canal é criado e mensagens desse canal são distribuídas para clientes que se inscrevem.
Mudanças principais no Redis 7.0:
- Suporte adicionado para funções executadas no lado servidor. Ao contrário dos scripts anteriormente suportados na linguagem Lua, as funções não estão ligadas ao aplicativo e visam implementar lógica adicional que expande as capacidades do servidor. As funções são processadas de maneira integrada com os dados e em relação ao banco de dados, e não ao aplicativo, incluindo replicação e armazenamento em armazenamento permanente.
- Foi proposta uma segunda edição do ACL, que permite gerenciar o acesso a dados com base em chaves e admite a definição de diferentes conjuntos de regras de acesso a comandos com a possibilidade de vincular vários seletores (conjuntos de permissões) a cada usuário. Cada chave pode ser associada a certas permissões, por exemplo, é possível restringir o acesso apenas para leitura ou gravação de um subconjunto específico de chaves.
- Foi fornecida uma implementação sequencial (sharded) que funciona em cluster do paradigma de publicação por assinatura (Publish-Subscribe), onde uma mensagem é enviada a um nó específico ao qual o canal de mensagens está vinculado, e depois essa mensagem é redirecionada para os outros nós que pertencem à seção (shard). Os clientes podem receber mensagens assinando o canal, tanto conectando-se ao nó principal quanto aos nós secundários da seção. O controle é feito através dos comandos SSUBSCRIBE, SUNSUBSCRIBE e SPUBLISH.
- Adicionada a capacidade de manipulação de subcomandos na maioria dos contextos.
- Novos comandos foram adicionados:
- 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.
- Foi fornecida a possibilidade de processar várias configurações em uma única chamada CONFIG SET/GET.
- As opções ‘—json’, ‘-2’, ‘—scan’, ‘—functions-rdb’ foram adicionadas ao utilitário redis-cli.
- Por padrão, o acesso dos clientes às configurações e comandos que afetam a segurança está desativado (por exemplo, os comandos DEBUG e MODULE estão desabilitados, e as alterações nas configurações com a flag PROTECTED_CONFIG são proibidas). A saída para o arquivo de histórico de comandos que contém dados confidenciais foi descontinuada no redis-cli.
- Foi realizada uma grande quantidade de otimizações voltadas para aumentar a performance e reduzir o consumo de memória. Por exemplo, o consumo de memória foi significativamente reduzido ao ativar o modo de cluster, ao executar operações de copy-on-write e ao trabalhar com hashes e chaves zset. A lógica de gravação de dados no disco (chamada de fsync) foi aprimorada. O número de pacotes de rede e chamadas de sistema ao enviar respostas ao cliente foi reduzido. A eficiência da replicação foi aumentada.
- A vulnerabilidade CVE-2022-24735 no ambiente de execução de scripts Lua foi corrigida, permitindo a substituição do próprio código Lua e a execução do mesmo no contexto de outro usuário, incluindo aqueles com privilégios mais altos.
- A vulnerabilidade CVE-2022-24736 foi corrigida, que permitia a finalização abrupta do processo redis-server devido à desreferenciação de um ponteiro nulo. O ataque era realizado através do carregamento de scripts Lua especialmente formatados.
Fonte: opennet.ru
