Strings do Redis (Parte 1)
Strings são o tipo de dado mais básico do Redis. Esta lição aborda comandos básicos de operação de string.
Comando SET em Detalhe
O comando SET define um par chave-valor e é o comando Redis mais usado.
Uso Básico
SET minhaChave "Olá Redis"
OK
Um SET bem-sucedido retorna OK.
Parâmetros do Comando SET
SET suporta múltiplos parâmetros opcionais para diferentes estratégias de definição:
# EX: definir expiração em segundos
SET session:token "user_data" EX 3600
# PX: definir expiração em milissegundos
SET cache:key "valor" PX 60000
# NX: definir apenas se a chave não existir
SET lock:resource "locked" NX
# XX: definir apenas se a chave existir
SET counter 100 XX
# Combinado: definir um lock com expiração
SET lock:order:123 "locked" NX EX 10
Referência de Parâmetros
| Parâmetro | Descrição | Exemplo |
|---|---|---|
| EX seconds | Definir expiração em segundos | SET key value EX 60 |
| PX milliseconds | Definir expiração em milissegundos | SET key value PX 60000 |
| EXAT timestamp | Definir expiração como timestamp Unix (segundos) | SET key value EXAT 1700000000 |
| PXAT timestamp | Definir expiração como timestamp Unix (milissegundos) | SET key value PXAT 1700000000000 |
| NX | Definir apenas se a chave não existir | SET key value NX |
| XX | Definir apenas se a chave existir | SET key value XX |
| GET | Retornar o valor antigo (Redis 6.2+) | SET key value GET |
| KEEPTTL | Manter o TTL existente | SET key value KEEPTTL |
SET lock:resource "valor" NX EX 10 é a maneira clássica de implementar locks distribuídos. NX garante atomicidade, EX previne deadlocks.
Exemplo: Implementando um Lock Distribuído
# Adquirir lock (definir apenas se o lock não existir, liberação automática após 10 segundos)
SET lock:product:123 "order_process" NX EX 10
# Liberar lock (deletar a chave)
DEL lock:product:123
Comando GET em Detalhe
O comando GET recupera o valor de uma chave.
Uso Básico
SET minhaChave "Olá Redis"
GET minhaChave
"Olá Redis"
Chave Não Existe
GET naoexiste
(nil)
Retorna (nil) quando a chave não existe.
Variantes do Comando GET
# GETSET: obter valor antigo e definir novo valor
SET counter 100
GETSET counter 0
"100" # Retorna valor antigo
GET counter
"0" # Atualizado para novo valor
# GETRANGE: obter substring de uma string
SET message "Olá Redis Mundo"
GETRANGE message 0 3
"Olá"
GETRANGE message 5 9
"Redis"
GETRANGE key 0 4 obtém caracteres nas posições 0 a 4 (5 caracteres no total).
DEL - Deletar Chaves
O comando DEL deleta uma ou mais chaves.
Deletar uma Única Chave
SET temp "temporário"
DEL temp
(integer) 1 # Retorna o número de chaves deletadas
Deletar Múltiplas Chaves
SET key1 "valor1"
SET key2 "valor2"
SET key3 "valor3"
DEL key1 key2 key3
(integer) 3 # Deletou 3 chaves
Deletar Chave Inexistente
DEL naoexiste
(integer) 0 # Deletou 0 chaves
MSET e MGET Operações em Lote
MSET e MGET podem definir ou obter múltiplos pares chave-valor de uma só vez, reduzindo viagens de ida e volta na rede.
MSET Configuração em Lote
MSET user:1:name "Alice" user:1:age "25" user:1:city "Beijing"
OK
# Equivalente a
SET user:1:name "Alice"
SET user:1:age "25"
SET user:1:city "Beijing"
MGET Obtenção em Lote
MGET user:1:name user:1:age user:1:city
1) "Alice"
2) "25"
3) "Beijing"
# Incluindo chaves que não existem
MGET user:1:name user:1:email user:1:age
1) "Alice"
2) (nil) # Chave não existe
3) "25"
MSETNX: Definir Apenas se Nenhuma das Chaves Existir
# Definir apenas se nenhuma das chaves existir
MSETNX key1 "valor1" key2 "valor2"
(integer) 1 # Sucesso
# Tentar novamente (key1 e key2 já existem)
MSETNX key1 "novo1" key3 "valor3"
(integer) 0 # Falhou, key1 já existe
# Verificar: key3 não foi definida
GET key3
(nil)
STRLEN - Obter Tamanho
STRLEN retorna o tamanho de um valor de string (em bytes).
Uso Básico
SET minhaChave "Olá Redis"
STRLEN minhaChave
(integer) 10
SET texto "Olá"
STRLEN texto
(integer) 4
Chave Não Existe
STRLEN naoexiste
(integer) 0
APPEND - Anexar à String
O comando APPEND anexa conteúdo ao final de uma string.
Uso Básico
SET minhaChave "Olá"
APPEND minhaChave " Redis"
(integer) 10 # Retorna o tamanho total após anexar
GET minhaChave
"Olá Redis"
Anexando a uma Chave Inexistente
APPEND novaChave "valor"
(integer) 5 # Equivalente a SET novaChave "valor"
GET novaChave
"valor"
Casos de Uso de String
Caso de Uso 1: Cache
# Cache de resposta de API
SET cache:api:user:1 '{"name":"Alice","age":25}' EX 300
# Obter dados em cache
GET cache:api:user:1
Caso de Uso 2: Armazenamento de Sessão
# Armazenar sessão do usuário (expiração de 30 minutos)
SET session:token:abc123 '{"user_id":1,"role":"admin"}' EX 1800
# Validar sessão
GET session:token:abc123
Caso de Uso 3: Lock Distribuído
# Adquirir lock (liberação automática após 10 segundos)
SET lock:order:process "server1" NX EX 10
# Retorna OK significa lock adquirido
# Retorna nil significa lock está sendo mantido por outro processo
# Liberar lock
DEL lock:order:process
Caso de Uso 4: Código de Verificação
# Armazenar código de verificação (expiração de 5 minutos)
SET code:phone:13800138000 "123456" EX 300
# Verificar
GET code:phone:13800138000
Caso de Uso 5: Limitação de Taxa
# Registrar contagem de acesso à API (janela de 1 minuto)
SET limit:api:user:1 "0" EX 60
# Incrementar em cada acesso (precisa ser usado com INCR)
Otimização de Codificação de String
Redis seleciona automaticamente a codificação ideal com base no conteúdo da string:
| Codificação | Condição | Descrição |
|---|---|---|
| int | Valor inteiro dentro do intervalo long | Codificação de inteiro, economiza memória |
| embstr | Tamanho da string <= 44 bytes | String embutida, armazenamento compacto |
| raw | Tamanho da string > 44 bytes | String normal, usa SDS |
Verificando Tipo de Codificação
SET intkey 12345
OBJECT ENCODING intkey
"int"
SET chavecurta "Olá"
OBJECT ENCODING chavecurta
"embstr"
SET chavelonga "Esta é uma string muito longa que excede o limite de 44 bytes"
OBJECT ENCODING chavelonga
"raw"
❓ Perguntas Frequentes
SET key value XX. Ele só define o novo valor se a chave já existir.📖 Resumo
- SET define um par chave-valor, suporta parâmetros EX/PX/NX/XX
- GET recupera um valor, retorna nil se a chave não existir
- DEL deleta chaves, retorna o número real deletado
- MSET/MGET para operações em lote, reduzindo viagens de rede
- STRLEN obtém tamanho da string, APPEND anexa à string
- Strings são comumente usadas para cache, sessões, locks distribuídos, códigos de verificação
- Redis seleciona automaticamente a codificação ideal (int/embstr/raw)
📝 Atividades
- Operações básicas: Use SET para armazenar seu nome, idade e cidade, depois recupere todos de uma vez com MGET
- Prática de expiração: Defina uma chave com TTL e verifique o tempo restante com TTL
- Lock distribuído: Implemente um lock distribuído simples usando SET NX EX, tente adquirir e liberar
- Operações em lote: Use MSET para definir 10 chaves, depois use MGET para obter 5 delas
Próxima Lição
Na próxima lição, nós aprenderemos sobre Strings do Redis (Parte 2), abordando operações numéricas e operações de bit.



