Volver a Redis Básico

Strings y Hashes en Redis

Operaciones Avanzadas con Strings

# GETSET — obtener y establecer de forma atómica GETSET contador 0 # retorna valor antiguo, establece nuevo # GETDEL — obtener y eliminar GETDEL clave_temporal # APPEND SET saludo "Hola" APPEND saludo ", Mundo!" GET saludo # "Hola, Mundo!" # STRLEN STRLEN saludo # 12 # GETRANGE / SETRANGE (subcadenas) GETRANGE saludo 0 3 # "Hola" SETRANGE saludo 6 "Redis" # Operaciones de bits (usuarios activos, flags de características) SETBIT usuario:flags:1001 0 1 # bit 0 = "email_verificado" GETBIT usuario:flags:1001 0 # 1 BITCOUNT usuario:flags:1001 # contar bits activados

Hashes — Almacenar Objetos

# Establecer campos HSET usuario:1001 nombre "Alicia" email "[email protected]" edad 30 # Obtener un campo HGET usuario:1001 nombre # "Alicia" # Obtener todos los campos HGETALL usuario:1001 # { nombre: "Alicia", email: "[email protected]", edad: "30" } # Obtener varios a la vez HMGET usuario:1001 nombre email # Verificar existencia HEXISTS usuario:1001 telefono # 0 (no existe) # Eliminar campo HDEL usuario:1001 edad # Incrementar campo numérico HINCRBY producto:42 vistas 1 HINCRBYFLOAT producto:42 calificacion 0.5 # Claves / valores / longitud HKEYS usuario:1001 HVALS usuario:1001 HLEN usuario:1001 # 2

Ejemplo con Node.js / ioredis

import Redis from 'ioredis'; const redis = new Redis({ host: 'localhost', port: 6379, password: 'tupassword' }); // Almacenar usuario como hash await redis.hset('usuario:1001', { nombre: 'Alicia', email: '[email protected]', rol: 'admin' }); // Recuperar todos los campos const usuario = await redis.hgetall('usuario:1001'); console.log(usuario); // { nombre: 'Alicia', email: '...', rol: 'admin' } // Actualización atómica con TTL (pipeline) const pipeline = redis.pipeline(); pipeline.hset('usuario:1001', 'ultimaVisita', Date.now()); pipeline.expire('usuario:1001', 86400); await pipeline.exec();

Patrón de Caché con Hashes

async function obtenerUsuario(userId: string) { const cacheKey = `usuario:${userId}`; const cached = await redis.hgetall(cacheKey); if (Object.keys(cached).length > 0) return cached; const usuario = await db.query('SELECT * FROM usuarios WHERE id = ?', [userId]); await redis.hset(cacheKey, usuario); await redis.expire(cacheKey, 3600); return usuario; }

Comparación Hash vs String

String (JSON)Hash
Almacenar objetoSET key '{"nombre":"Alicia"}'HSET key nombre Alicia
Actualizar 1 campoLeer, parsear, modificar, serializarHSET key nombre Roberto
Actualización parcial
MemoriaMenos overheadCompacto para pocos campos