Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-12-20 GMT+08:00

Novos recursos do DCS for Redis 4.0

Em comparação com o DCS for Redis 3.0, o DCS for Redis 4.0 e versões posteriores adicionam suporte aos novos recursos do Redis de código aberto e suportam a criação mais rápida de instâncias.

A implementação da instância mudou do modo de VM para o modo de conteinerização baseado em servidor físico. Uma instância pode ser criada dentro de 8 a 10 segundos.

O Redis 4.0 oferece os seguintes novos recursos:

  1. Novos comandos, como MEMORY e SWAPDB
  2. Lazyfree, atrasando a exclusão de chaves grandes e reduzindo o impacto da exclusão nos recursos do sistema
  3. Otimização do desempenho da memória, ou seja, desfragmentação ativa

Comando MEMORY

No Redis 3.0 e versões anteriores, você pode executar o comando INFO MEMORY para aprender apenas as estatísticas de memória limitada. O Redis 4.0 introduz o comando MEMORY para ajudá-lo a entender melhor o uso da memória do Redis.

127.0.0.1:6379[8]> memory help
1) MEMORY <subcommand> arg arg ... arg. Subcommands are:
2) DOCTOR - Return memory problems reports.
3) MALLOC-STATS -- Return internal statistics report from the memory allocator.
4) PURGE -- Attempt to purge dirty pages for reclamation by the allocator.
5) STATS -- Return information about the memory usage of the server.
6) USAGE <key> [SAMPLES <count>] -- Return memory in bytes used by <key> and its value. Nested values are sampled up to <count
> times (default: 5).
127.0.0.1:6379[8]>

usage

Digite memory usage [key]. Se a chave existir, a memória estimada usada pelo valor da chave é retornada. Se a chave não existir, nil é retornado.

127.0.0.1:6379[8]> set dcs "DCS is an online, distributed, in-memory cache service compatible with Redis, and Memcached."
OK
127.0.0.1:6379[8]> memory usage dcs
(integer) 141
127.0.0.1:6379[8]> 
  1. O usage coleta estatísticas sobre o uso de memória do valor e da chave, excluindo o uso de memória Expire da chave.
    // The following is verified based on Redis 5.0.2. Results may differ in other Redis versions.
    192.168.0.66:6379> set a "Hello, world!"
    OK
    192.168.0.66:6379> memory usage a
    (integer) 58
    192.168.0.66:6379> set abc "Hello, world!"
    OK
    192.168.0.66:6379> memory usage abc
    (integer) 60   //After the key name length changes, the memory usage also changes. This indicates that the usage statistics contain the usage of the key.
    192.168.0.66:6379> expire abc 1000000
    (integer) 1
    192.168.0.66:6379> memory usage abc
    (integer) 60   // After the expiration time is added, the memory usage remains unchanged. This indicates that the usage statistics do not contain the expire memory usage.
    192.168.0.66:6379> 
  2. Para hashes, lists, sets e sorted sets, o comando MEMORY USAGE mostra estatísticas e fornece o uso estimado da memória.

    Uso: memory usage keyset samples 1000

    keyset indica a chave de um conjunto, e 1000 indica o número de amostras.

stats

Retorna o uso detalhado de memória da instância atual.

Uso: memory stats

127.0.0.1:6379[8]> memory stats
 1) "peak.allocated"
 2) (integer) 2412408
 3) "total.allocated"
 4) (integer) 2084720
 5) "startup.allocated"
 6) (integer) 824928
 7) "replication.backlog"
 ... ...

A tabela a seguir descreve os significados de alguns itens de retorno.

Tabela 1 Valores de retorno de MEMORY STATS

Valor retornado

Descrição

peak.allocated

Memória de pico alocada pelo alocador durante a execução da instância do Redis. É o mesmo que used_memory_peak da info memory.

total.allocated

O número de bytes alocados pelo alocador. É o mesmo que used_memory of info memory

startup.allocated

Quantidade inicial de memória consumida pelo Redis na inicialização em bytes

replication.backlog

Tamanho em bytes da lista de pendências de replicação. É especificado no parâmetro repl-backlog-size. O valor padrão é 1 MB.

clients.slaves

O tamanho total em bytes de todas as réplicas de custos indiretos

clients.normal

O tamanho total em bytes de todos os clientes de custos indiretos

overhead.total

A soma de todos os custos indiretos. overhead.total é o total de memória total.allocated alocado pelo alocador menos a memória real usada para armazenar dados.

keys.count

O número total de chaves armazenadas em todos os bancos de dados no servidor

keys.bytes-per-key

Número médio de bytes ocupados por cada chave. Observe que o custo indireto também é alocado para cada chave. Portanto, esse valor não indica o comprimento médio da chave.

dataset.bytes

Bytes de memória ocupados por dados do Redis, ou seja, overhead.total subtraído de total.allocated

dataset.percentage

A porcentagem de dataset.bytes fora do uso de memória líquida

peak.percentage

A porcentagem de pico.alocado fora do total.allocated

fragmentation

Taxa de fragmentação de memória

doctor

Uso: memory doctor

Se o valor de used_memory (total.allocated) for menor que 5 MB, MEMORY DOCTOR considera que o uso de memória é muito pequeno e não realiza diagnósticos adicionais. Se qualquer uma das seguintes condições for atendida, o Redis fornecerá resultados de diagnóstico e sugestões:
  1. O pico de memória alocada é maior que 1,5 vezes do total_allocated atual, ou seja, peak.allocated/total.allocated > 1,5, indicando que a taxa de fragmentação da memória é alta e que o RSS é muito maior que used_memory.
  2. O valor de alta fragmentação/fragmentação é maior que 1,4, indicando que a taxa de fragmentação da memória é alta.
  3. O uso médio de memória de cada cliente normal é superior a 200 KB, indicando que o pipeline pode ser usado incorretamente ou que o cliente Pub/Sub não processa mensagens a tempo.
  4. O uso médio de memória de cada cliente secundário é maior que 10 MB, indicando que o tráfego de gravação do principal é muito alto.

purge

Uso: memory purge

Executa o comando interno jemalloc para liberar a memória. Os objetos liberados incluem a memória que é ocupada, mas não usada pelos processos do Redis, ou seja, fragmentos de memória.

MEMORY PURGE aplica-se somente à instância do Redis que usa jemalloc como alocador.

Lazyfree

Problema

O Redis é de thread único. Quando uma solicitação demorada é executada, todas as solicitações são colocadas na fila. Antes que a solicitação seja concluída, o Redis não pode responder a outras solicitações. Como resultado, podem ocorrer problemas de desempenho. Uma das solicitações demoradas é a exclusão de uma chave grande.

Princípio

O recurso Lazyfree do Redis 4.0 evita o bloqueio causado pela exclusão de chaves grandes, garantindo desempenho e disponibilidade.

Ao excluir uma chave, o Redis libera de forma assíncrona a memória ocupada pela chave. A operação de liberação da chave é processada no subthread de I/O de segundo plano (BIO).

Utilização

  1. Exclusão ativa
    • UNLINK

      Semelhante ao DEL, este comando remove chaves. Se houver mais de 64 elementos a serem excluídos, a operação de liberação de memória é executada em um thread de BIO independente. Portanto, o comando UNLINK pode excluir uma chave grande contendo milhões de elementos em um curto espaço de tempo.

    • FLUSHALL e FLUSHDB

      Uma opção ASYNC foi adicionada ao FLUSHALL e ao FLUSHDB para permitir que todo o conjunto de dados ou um único banco de dados fosse liberado de forma assíncrona.

  2. Exclusão passiva: exclusão de chaves expiradas e remoção de chaves grandes

    Há quatro cenários para exclusão passiva e cada cenário corresponde a um parâmetro. Esses parâmetros são desativados por padrão.

    lazyfree-lazy-eviction no // Whether to enable Lazyfree when the Redis memory usage reaches maxmemory and the eviction policy is set.
    lazyfree-lazy-expire no // Whether to enable Lazyfree when the key with TTL is going to expire.
    lazyfree-lazy-server-del no // An implicit DEL key is used when an existing key is processed.
    slave-lazy-flush no // Perform full data synchronization for the standby node. Before loading the RDB file of the master, the standby node executes the FLUSHALL command to clear its own data.

Outros novos comandos

  1. swapdb

    Troca dois bancos de dados de Redis.

    swapdb dbindex1 dbindex2

  2. zlexcount

    Retorna o número de elementos no conjunto classificado.

    zlexcount key min max

Otimização de memória e desempenho

  1. Em comparação com antes, a mesma quantidade de dados pode ser armazenada com menos memória.
  2. A memória usada pode ser desfragmentada e gradualmente removida.