Dominando GET e SET no Redis: Operações Básicas de Dados
O Redis é renomado por sua velocidade e versatilidade, funcionando como um repositório de estruturas de dados em memória, cache e message broker. No cerne de qualquer interação com o Redis estão os comandos fundamentais usados para gerenciar os pares chave-valor que definem sua estrutura. Este artigo serve como um guia completo para dominar os comandos SET e GET — a base da persistência e recuperação de dados no Redis.
Compreender esses dois comandos simples, mas poderosos, é crucial para construir aplicações de alto desempenho. Seja implementando uma camada de cache simples ou gerenciando dados de sessão, o uso eficiente de SET e GET garante acesso rápido e manipulação confiável de dados dentro da sua instância Redis.
O Modelo Chave-Valor do Redis
Antes de mergulhar nos comandos, é importante lembrar que o Redis opera em um modelo simples de armazenamento chave-valor. Cada dado (o valor) é acessado usando um identificador exclusivo (a chave). As chaves são strings, e os valores podem ser vários tipos de dados (strings, listas, conjuntos, hashes, etc.). SET e GET lidam principalmente com o tipo de dado String, que é o tipo mais básico e frequentemente usado no Redis.
1. Definindo Dados: O Comando SET
O comando SET é usado para atribuir um valor a uma chave. Se a chave já contiver dados, o comando SET substituirá o valor existente. Sua sintaxe básica é direta.
Sintaxe e Uso Básico
A forma mais simples requer apenas a chave e o valor:
SET chave valor
Exemplo: Armazenando o nome de um usuário
127.0.0.1:6379> SET user:100:name "Alice Johnson"
OK
127.0.0.1:6379> GET user:100:name
"Alice Johnson"
Opções Avançadas de SET: NX, XX e Expiração
O poder do SET reside em seus argumentos opcionais, que permitem a definição condicional atômica e o gerenciamento de tempo de vida (time-to-live - TTL). Essas opções são vitais para implementar locks e caches corretamente.
A. Definição Condicional (NX e XX)
Essas opções controlam quando uma operação de definição ocorre, prevenindo sobrescrita acidental ou garantindo que uma sobrescrita ocorra somente se a chave existir.
-
NX(Not Exists - Não Existe): Define a chave somente se ela ainda não existir. Isso é excelente para implementar locks distribuídos simples.
redis SET my_lock_key some_unique_value NX -
XX(Exists - Existe): Define a chave somente se ela já existir. Útil para atualizar chaves específicas somente quando você tem certeza de que elas já estão preenchidas.
redis SET session:token:456 new_value XX
B. Definindo Tempo de Expiração (TTL)
Para gerenciar memória e implementar cache baseado em tempo, você pode definir um tempo de expiração diretamente no comando SET. Isso é muito mais eficiente do que definir a chave e depois chamar EXPIRE separadamente.
EX segundos: Define o tempo de expiração em segundos.PX milissegundos: Define o tempo de expiração em milissegundos.EXAT timestamp: Define a expiração para um timestamp Unix específico (segundos).PXAT timestamp: Define a expiração para um timestamp Unix específico (milissegundos).
Exemplo: Definindo uma chave para expirar em uma hora (3600 segundos)
127.0.0.1:6379> SET cache:product:500 "Product Details" EX 3600
OK
127.0.0.1:6379> TTL cache:product:500
(integer) 3598
Melhor Prática: Sempre use
SET chave valor EX N(ouPX N) ao fazer cache. Isso garante que, mesmo que o Redis falhe e reinicie, as chaves expiradas sejam eventualmente limpas, evitando o acúmulo de dados obsoletos.
Combinando Opções
Todas as opções podem ser combinadas para operações atômicas complexas:
# Define a chave somente se ela não existir e a faz expirar em 60 segundos
SET my_config_setting "active" NX EX 60
2. Recuperando Dados: O Comando GET
O comando GET recupera o valor string associado a uma determinada chave. É uma das operações mais rápidas que o Redis executa, geralmente concluindo em microssegundos.
Sintaxe e Uso Básico
GET chave
Exemplo: Recuperando o nome do usuário armazenado
127.0.0.1:6379> GET user:100:name
"Alice Johnson"
Lidando com Chaves Inexistentes
Se a chave não existir, GET retorna uma resposta especial indicando que nada foi encontrado:
127.0.0.1:6379> GET non_existent_key
(nil)
No código da aplicação, receber (nil) é a maneira padrão de determinar que os dados estão ausentes, geralmente acionando uma falha de cache (cache miss) onde a aplicação deve buscar os dados da fonte primária (como um banco de dados) e subsequentemente gravá-los de volta no Redis.
Recuperando Valores com Informações de Expiração (GET com GETEX)
Embora o comando GET básico retorne apenas o valor, às vezes você precisa saber se a chave está prestes a expirar. O comando GETEX (ou o uso de GET combinado com flags específicas em versões modernas do Redis) pode retornar tanto o valor quanto o Tempo de Vida restante (TTL).
No entanto, para uso padrão, a abordagem mais simples é usar GET seguido por TTL se a verificação da expiração for necessária, ou simplesmente confiar que a chave desaparecerá automaticamente.
3. Aplicação Prática: Caching com GET e SET
O caso de uso fundamental para GET e SET é implementar um padrão simples de cache-aside.
Etapas na Lógica da Aplicação:
1. Tentativa de Recuperação (GET): A aplicação primeiro tenta recuperar os dados usando GET chave.
2. Cache Hit (Acerto de Cache): Se o resultado não for (nil), os dados são retornados imediatamente (rápido).
3. Cache Miss (Falha de Cache): Se o resultado for (nil):
a. A aplicação busca os dados do armazenamento de dados primário lento (ex: PostgreSQL).
b. A aplicação grava os dados atualizados de volta no Redis usando SET chave valor EX [duração].
c. Os dados são então retornados ao usuário.
Este padrão reduz drasticamente a latência ao servir dados acessados com frequência diretamente da memória.
Resumo e Próximos Passos
Os comandos SET e GET são os pontos de entrada essenciais para interagir com os dados do Redis. Embora simples na aparência, os argumentos opcionais de SET — especialmente NX, XX e os modificadores de expiração (EX, PX) — fornecem o controle atômico necessário para sistemas robustos e prontos para produção.
Principais Lições:
* Use SET chave valor para escritas simples.
* Use SET chave valor NX para evitar sobrescrever dados existentes.
* Use SET chave valor EX 3600 para garantir que as chaves expirem automaticamente após uma hora.
* Use GET chave para recuperar dados; espere (nil) se a chave estiver ausente ou expirada.
Assim que você se sentir confortável com essas operações fundamentais, explore os outros tipos de dados do Redis, como Hashes (HSET, HGET) e Listas (LPUSH, RPOP), para desbloquear todo o potencial deste poderoso repositório em memória.