📒 

Usando os comandos de scan no Redis no Linux

O Redis, um armazenamento de estrutura de dados em memória de código aberto, é conhecido por sua velocidade e versatilidade como um banco de dados de valor-chave. Um de seus poderosos recursos é a capacidade de iterar incrementalmente através de conjuntos de dados usando comandos de scan. Isso é particularmente útil quando se lida com grandes conjuntos de dados, pois permite a recuperação eficiente de dados sem sobrecarregar o servidor. Para usuários em um servidor Linux dedicado, o uso de comandos  scan no Redis pode melhorar o desempenho do manuseio de dados, permitindo o processamento preciso e otimizado de recursos do conjunto de dados. Neste artigo, exploraremos como usar efetivamente os comandos de scan no Redis em um ambiente Linux, oferecendo exemplos detalhados e práticas recomendadas para gerenciar e recuperar dados em escala…

O que são comandos de scan?

Os comandos de  scan no Redis fornecem uma maneira de iterar sobre chaves, conjuntos, hashes e conjuntos ordenados de maneira não bloqueante. Ao contrário do comando KEYS, que pode ser perigoso para grandes conjuntos de dados porque retorna todas as chaves correspondentes de uma só vez, os comandos  scan retornam um pequeno número de elementos de cada vez. Isto minimiza o impacto no desempenho e permite uma iteração incremental.

Comandos de pesquisa de chaves

  1. SCAN: Itera através de chaves no espaço de chaves.
  2. SSCAN: Itera através de elementos num conjunto.
  3. HSCAN: Itera através de campos e valores num hash.
  4. ZSCAN: Itera através de membros e pontuações num conjunto ordenado.

Sintaxe básica dos comandos de pesquisa

Cada comando de pesquisa tem uma sintaxe semelhante:

SCAN cursor [MATCH padrão] [COUNT contagem]
  • cursor: Um número inteiro que representa a posição a partir da qual se inicia a digitalização. Para iniciar uma nova pesquisa, utilize 0.
  • MATCH pattern: (opcional) Um padrão para filtrar as chaves retornadas. Suporta padrões do tipo glob.
  • COUNT count: (opcional) Uma dica para o Redis sobre quantos elementos retornar em cada iteração.

Instalando o Redis no Linux

Antes de mergulharmos na utilização dos comandos de scan, certifique-se de que o Redis está instalado no seu sistema Linux. Para aqueles que usam um Servidor Dedicado Debian, a configuração do Redis é simples e pode melhorar a capacidade do servidor para lidar com o processamento de dados na memória de forma eficiente. Eis como instalar o Redis num sistema baseado em Debian, garantindo um ambiente estável optimizado para operações de elevado desempenho.

Seguindo esses passos, você configurará o Redis de uma forma que aproveita os recursos e a estabilidade do seu servidor Debian dedicado, ideal para tarefas robustas de manipulação de dados.

sudo apt update
sudo apt install redis-server

Para CentOS/RHEL, use:

sudo yum install redis

Uma vez instalado, inicie o servidor Redis:

sudo systemctl start redis

Conectando ao Redis

Abra o seu terminal e ligue-se à sua instância Redis utilizando o Redis CLI:

redis-cli

Agora é possível executar comandos do Redis na CLI.

Usando o comando SCAN

Exemplo 1: SCAN básico

Para recuperar todas as chaves no banco de dados Redis, você pode usar:

SCAN 0

Este comando retornará um cursor e uma lista de chaves.

Exemplo 2: Utilizar MATCH para filtrar teclas

Se quiser encontrar chaves que correspondam a um padrão específico, como chaves que começam com “user:”, pode usar:

SCAN 0 MATCH nome de utilizador:*

Este comando devolve apenas as chaves que começam com “user:”.

Exemplo 3: Especificar COUNT

Para indicar quantas chaves o Redis deve retornar em cada iteração, é possível especificar uma contagem:

SCAN 0 COUNT 10

Isso tentará retornar aproximadamente 10 chaves. Note-se que o número real devolvido pode ser inferior a este.

Exemplo 4: Iterando por todas as chaves

Para iterar através de todas as chaves em múltiplas iterações, você precisa manter o controle do cursor retornado. Aqui está um exemplo simples de script de shell:

cursor=0
while true; do
result=$(redis-cli SSCAN myset $cursor MATCH apple:*)
echo "$result" # Processa o resultado conforme necessário
cursor=$(echo "$resultado" | awk 'NR==1{imprimir $1}') # Atualizar o cursor
if [[ "$cursor" == "0" ]]; then
break # Pára quando o cursor volta a ser 0
fi
done

Utilizar o comando SSCAN

O comando SSCAN é utilizado para iterar através dos elementos de um conjunto. A sua sintaxe é semelhante à do comando SCAN:

SSCAN cursor de chave [MATCH padrão] [COUNT contagem]

Exemplo de SSCAN

Passo 1: Criar um conjunto e adicionar elementos

Vamos criar um conjunto chamado myset e adicionar-lhe alguns elementos:

SADD myset "maçã"
SADD myset "banana"
SADD myset "cereja"
SADD myset "tâmara"
SADD myset "baga de sabugueiro"

Passo 2: Utilizar o comando SSCAN

Agora que temos um conjunto chamado myset, podemos usar o comando SSCAN para iterar através dos seus elementos.

  1. Comando SSCAN básico:Suponha que tem um conjunto chamado “myset”. Para percorrer os seus elementos:
    SSCAN myset 0
  2. Utilizar MATCH:Para filtrar os elementos de um conjunto com base num padrão e adicionar alguns elementos que incluem a palavra “mango” e outras variações::
    SSCAN myset 0 MATCH mango:*
  3. Iterando através de um conjunto:Você pode usar um loop para iterar através de um conjunto :

#!/bin/bash
cursor=0
echo "A analisar o meu conjunto:"
while true; do
# Analisa o conjunto
result=$(redis-cli SSCAN myset $cursor)
# Imprime os elementos devolvidos pelo SSCAN
echo "$result"
# Atualizar o cursor para a próxima iteração
cursor=$(echo "$resultado" | awk 'NR==1{imprimir $1}')
# Interrompe o ciclo se o cursor voltar a 0
if [[ "$cursor" == "0" ]]; then
quebra
fi
done

Executar o Script

  1. Salve o script como scan_myset.sh.
  2. Torne-o executável:
    chmod x scan_myset.sh
  3. Execute o script:
    ./scan_myset.sh

Usando os comandos HSCAN e ZSCAN

Comando HSCAN

O comando HSCAN percorre os campos e valores de um hash:

HSCAN cursor de chave [MATCH padrão] [COUNT contagem]

O comando HSCAN é utilizado para iterar através de campos e valores num hash.

Passo 1: Criar um Hash e adicionar campos

  1. Crie um hash chamado myhash e adicione alguns campos a ele:
HSET myhash nome "John Doe"
HSET myhash idade "30"
HSET myhash profissão "Programador de software"
HSET myhash cidade "São Francisco"
HSET myhash país "USA" (EUA)

Etapa 2: usar o HSCAN para iterar pelo hash

  1. Use o comando HSCAN para iterar pelos campos em myhash:
HSCAN myhash 0

Comando ZSCAN

ZSCAN é um comando Redis usado para iterar através dos membros de um conjunto ordenado de forma incremental. Ele permite que você recupere membros junto com suas pontuações associadas de uma forma eficiente e sem bloqueio. Este comando é particularmente útil para trabalhar com grandes conjuntos ordenados onde buscar todos os membros de uma vez pode não ser prático.

O comando ZSCAN itera através de membros e pontuações em um conjunto ordenado:

ZSCAN cursor de chave [MATCH padrão] [COUNT contagem]

Passo 1: Criar um conjunto ordenado e adicionar membros

Vamos criar um conjunto ordenado chamado mysortedset e adicionar alguns membros com pontuações:

ZADD mysortedset 1 "apple" (maçã)
ZADD mysortedset 2 "banana"
ZADD mysortedset 3 "cereja"

Comando básico ZSCAN:

Para iniciar a digitalização do conjunto ordenado, utilizar:

ZSCAN mysortedset 0

Passo 2: Utilizar MATCH para filtrar membros (opcional)

Se pretender filtrar os membros devolvidos pelo ZSCAN, pode utilizar a opção MATCH. Por exemplo, para encontrar barras que contenham a letra “e”, você pode executar:

ZSCAN mysortedset 0 MATCH *e*

Práticas recomendadas para utilização de comandos de digitalização

  1. Use SCAN em vez de KEYS: Evite usar o comando KEYS na produção, pois ele pode bloquear o servidor. Use SCAN para iteração sem bloqueio.
  2. Combine com MATCH e COUNT: Utilize as opções MATCH e COUNT para melhorar o desempenho e limitar o conjunto de resultados.
  3. Lidar com grandes conjuntos de dados: Ao lidar com grandes conjuntos de dados, processe as chaves em lotes usando cursores para gerenciar a memória de forma eficaz.
  4. Teste no desenvolvimento: Teste sempre a sua lógica de digitalização num ambiente de desenvolvimento para garantir que se comporta como esperado antes de a implementar na produção.

Conclusão

Usar os comandos de scan no Redis permite iterar eficientemente através de grandes conjuntos de dados em um ambiente Linux sem sobrecarregar o servidor. Ao entender como usar SCAN, SSCAN, HSCAN e ZSCAN, é possível gerenciar e recuperar dados do Redis com eficiência. Esses comandos são essenciais para a criação de aplicativos escalonáveis que exigem processamento de dados em tempo real. Para obter mais informações e uso detalhado, consulte a documentação oficial do Redis e experimente esses comandos no seu ambiente Redis.