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:
- Novos comandos, como MEMORY e SWAPDB
- Lazyfree, atrasando a exclusão de chaves grandes e reduzindo o impacto da exclusão nos recursos do sistema
- 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]>
- 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>
- 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.
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
- 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.
- O valor de alta fragmentação/fragmentação é maior que 1,4, indicando que a taxa de fragmentação da memória é alta.
- 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.
- 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
- 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.
- UNLINK
- 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
- swapdb
Troca dois bancos de dados de Redis.
swapdb dbindex1 dbindex2
- zlexcount
Retorna o número de elementos no conjunto classificado.
zlexcount key min max
Otimização de memória e desempenho
- Em comparação com antes, a mesma quantidade de dados pode ser armazenada com menos memória.
- A memória usada pode ser desfragmentada e gradualmente removida.