Fundamentos do Redis e Comparação com Memcached

Visão Geral do Redis e Sistemas NoSQL

O Redis é um sistema de banco de dados NoSQL de alto desempenho, frequentemente utilizado para caching, gerenciamento de sessões e contagem de métricas. Sua arquitetura baseada em chave-valor permite operações em memória com persistência opcional em disco.

Diferenças entre Redis e Memcached

Enquanto o Memcached foca em caching simples de chave-valor, o Redis oferece suporte a múltiplos tipos de dados estruturados e mecanismos de persistência. A tabela abaixo destaca as principais distinções:

Característica Redis Memcached
Estrutura de Dados 5 tipos: String, List, Set, Hash, ZSet Apenas String
Persistência Sim (RDB/AOF) Não
Clusterização Suportado nativamente Limitado
Cenários de Uso Caching, filas, contadores, rankings Caching básico de chave-valor

Operações com Tipos de Dados no Redis

String (Cadeia de Caracteres)

O tipo String armazena valores simples ou objetos serializados. Ideal para caching e contadores atômicos.

# Definir valor com expiração
SET usuario:456 "Maria Silva" EX 300

# Incrementar contador de visitas
INCR page:home:visits

# Operação atômica de incremento
INCRBY stock:produto_789 10

List (Lista)

Listas implementam filas duplamente encadeadas, úteis para sistemas de mensagens ou histórico.

# Adicionar itens à fila
LPUSH pedidos:fila "order_123" "order_456"

# Consumir com bloqueio
BRPOP pedidos:fila 30

# Manter tamanho limitado
LPUSH noticia:recente "evento_A"
LTRIM noticia:recente 0 49

Set (Conjunto)

Conjuntos armazenam elementos únicos e suportam operações matemáticas como interseção.

# Adicionar tags
SADD artigo:789:tags "python" "fastapi"

# Encontrar interseção
SINTER usuario:101:seguindo usuario:202:seguindo

# Seleção aleatória
SRANDMEMBER sorteio:participantes 3

Hash (Tabela Hash)

Ideais para armazenar objetos complexos com múltiplos campos.

# Atualizar campos específicos
HSET usuario:321:perfil nome "Carlos" nivel 5

# Incrementar campo numérico
HINCRBY usuario:321:stats pontuacao 15

# Recuperar múltiplos campos
HMGET usuario:321:perfil nome email

ZSet (Conjunto Ordenado)

Elementos com pontuação permitindo ordenação eficiente, essencial para rankings.

# Adicionar pontuações
ZADD ranking:semanal 85 "jogador_A" 92 "jogador_B"

# Recuperar top 10
ZREVRANGE ranking:semanal 0 9 WITHSCORES

# Verificar posição
ZRANK ranking:semanal "jogador_A"

Gerenciamento de Chaves

Operações essenciais para administração do espaço de dados:

# Definir tempo de vida
EXPIRE sessao:abc123 3600

# Verificar existência
EXISTS configuracao:sistema

# Escanear chaves de forma segura
SCAN 0 MATCH usuario:* COUNT 50

Bancos de Dados e Transações

O Redis suporta múltiplos bancos de dados isolados e transações com garantias limitadas:

# Selecionar banco de dados
SELECT 2

# Transação básica
MULTI
SET contador:erro 0
INCRBY contador:erro 5
EXEC

# Bloqueio otimista
WATCH inventario:produto_X
MULTI
DECR inventario:produto_X
EXEC

Integração com Spring Boot

Configuração otimizada para uso em aplicações Java:

@Configuration
public class RedisConfig {
    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost", 6379);
        return new LettuceConnectionFactory(config);
    }
}

@Service
public class CacheService {
    @Autowired
    private StringRedisTemplate redis;

    public void saveUser(Long id, String data) {
        redis.opsForValue().set("user:" + id, data, 10, TimeUnit.MINUTES);
    }

    public Long incrementProductView(Long productId) {
        return redis.opsForValue().increment("product:" + productId + ":views");
    }
}

Padrões de Chaves e Boas Práticas

Utilize uma estrutura hierárquica para organização: tipo:contexto:id:campo

  • Exemplo: user:session:token123
  • Evite KEYS * em produção; prefira SCAN com filtros
  • Agrupe operações relacionadas em transações quando necessário

Tags: Redis Memcached nosql Spring Boot caching

Publicado em 7-22 04:32