opción
HogarHogar Skill Gestión de bases de datos redis-best-practices

redis-best-practices

mindrally/skills mindrally/skills

Buenas prácticas de desarrollo con Redis para el almacenamiento en caché, las estructuras de datos y las operaciones clave-valor de alto rendimiento

...Expandir todo
41
Tiempo actualizado 29 de junio de 2026

Acerca de redis-best-practices

La habilidad «Prácticas recomendadas de Redis» ofrece una guía completa para utilizar Redis de forma eficaz como almacén de datos en memoria. Abarca los patrones óptimos para el almacenamiento en caché, el almacenamiento de sesiones, el análisis en tiempo real y las colas de mensajes, al tiempo que ayuda a los desarrolladores a evitar errores comunes y problemas de rendimiento. Esta habilidad aborda el reto de aprovechar todo el potencial de Redis enseñando la selección adecuada de estructuras de datos, las convenciones de nomenclatura de claves y los patrones arquitectónicos que garantizan la escalabilidad y la facilidad de mantenimiento.

La habilidad se centra en las cinco estructuras de datos principales de Redis —cadenas, hash, listas, conjuntos y conjuntos ordenados—, además de la nueva función de flujos para el procesamiento de eventos. Ofrece ejemplos prácticos de código para cada estructura, mostrando cuándo y cómo utilizar operaciones atómicas, comandos por lotes y operaciones de bloqueo. Entre los temas clave se incluyen la implementación de patrones eficientes de «cache-aside», el diseño de tablas de clasificación con conjuntos ordenados, la creación de colas de mensajes con listas y la gestión del procesamiento distribuido de eventos con grupos de consumidores. La guía hace hincapié en la eficiencia de la memoria, las políticas de caducidad adecuadas y los patrones de nomenclatura coherentes que facilitan la depuración y la escalabilidad de las aplicaciones de Redis.

Esta habilidad es ideal para desarrolladores de backend que trabajan con aplicaciones de alto rendimiento que requieren un acceso rápido a los datos, ingenieros de DevOps que diseñan capas de almacenamiento en caché y arquitectos que crean sistemas en tiempo real. Tanto si estás implementando la gestión de sesiones, creando un limitador de tasa, generando feeds de actividad o diseñando colas de tareas distribuidas, esta habilidad ofrece patrones probados en la práctica y ejemplos concretos que pueden aplicarse directamente a los sistemas de producción.

Preguntas frecuentes

¿Qué estructura de datos debo utilizar para una tabla de clasificación?

Utiliza conjuntos ordenados (ZADD, ZREVRANGE) en los que las puntuaciones representen la clasificación de los jugadores. Los conjuntos ordenados mantienen automáticamente el orden y permiten realizar consultas de clasificación eficientes y operaciones de rango basadas en puntuaciones.

¿Cómo implemento una caducidad adecuada de la caché?

Establece los tiempos de caducidad utilizando el parámetro EX con los comandos SET o utiliza SETEX. Elige los valores de TTL en función de la volatilidad de los datos: más cortos para datos que cambian con frecuencia (de segundos a minutos) y más largos para contenido estático (de horas a días).

¿Cuándo debo utilizar hash en lugar de varias claves de cadena?

Utiliza hash al almacenar objetos con varios campos. Los hash son más eficientes en cuanto al uso de la memoria que crear claves de cadena independientes para cada campo y permiten actualizaciones parciales sin necesidad de recuperar el objeto completo.

¿Cuál es la diferencia entre RPOP y BRPOP para las colas?

RPOP devuelve un valor inmediatamente o «null» si la lista está vacía. BRPOP es una operación de bloqueo que espera hasta un tiempo de espera especificado a que un elemento esté disponible, lo que la hace ideal para procesos de trabajo que necesitan esperar de forma eficiente a que lleguen nuevas tareas.

¿Cómo se gestiona el procesamiento distribuido con Redis Streams?

Utiliza grupos de consumidores con XGROUP CREATE y XREADGROUP. Varios consumidores pueden procesar mensajes en paralelo, y Redis realiza un seguimiento de los mensajes que ha recibido cada consumidor. Utiliza XACK para confirmar que el procesamiento se ha realizado correctamente.

Ver en GitHub

Redis Best Practices

Core Principles

  • Use Redis for caching, session storage, real-time analytics, and message queuing
  • Choose appropriate data structures for your use case
  • Implement proper key naming conventions and expiration policies
  • Design for high availability and persistence requirements
  • Monitor memory usage and optimize for performance

Key Naming Conventions

  • Use colons as namespace separators
  • Include object type and identifier in key names
  • Keep keys short but descriptive
  • Use consistent naming patterns across your application
# Good key naming examplesuser:1234:profileuser:1234:sessionsorder:5678:itemscache:api:products:listqueue:email:pendingsession:abc123def456rate_limit:api:user:1234

Data Structures

Strings

  • Use for simple key-value storage, counters, and caching
  • Consider using MGET/MSET for batch operations
# Simple cachingSET cache:user:1234 '{"name":"John","email":"[email protected]"}' EX 3600# CountersINCR stats:pageviews:homepageINCRBY stats:downloads:file123 5# Atomic operationsSETNX lock:resource:456 "owner:abc" EX 30

Hashes

  • Use for objects with multiple fields
  • More memory-efficient than multiple string keys
  • Supports partial updates
# Store user profileHSET user:1234 name "John Doe" email "[email protected]" created_at "2024-01-15"# Get specific fieldsHGET user:1234 emailHMGET user:1234 name email# Increment numeric fieldsHINCRBY user:1234 login_count 1# Get all fieldsHGETALL user:1234

Lists

  • Use for queues, recent items, and activity feeds
  • Consider blocking operations for queue consumers
# Message queueLPUSH queue:emails '{"to":"[email protected]","subject":"Welcome"}'RPOP queue:emails# Blocking pop for workersBRPOP queue:emails 30# Recent activity (keep last 100)LPUSH user:1234:activity "viewed product 567"LTRIM user:1234:activity 0 99# Get recent itemsLRANGE user:1234:activity 0 9

Sets

  • Use for unique collections, tags, and relationships
  • Supports set operations (union, intersection, difference)
# User tags/interestsSADD user:1234:interests "technology" "music" "travel"# Check membershipSISMEMBER user:1234:interests "music"# Find common interestsSINTER user:1234:interests user:5678:interests# Online users trackingSADD online:users "user:1234"SREM online:users "user:1234"SMEMBERS online:users

Sorted Sets

  • Use for leaderboards, priority queues, and time-series data
  • Elements sorted by score
# LeaderboardZADD leaderboard:game1 1500 "player:123" 2000 "player:456" 1800 "player:789"# Get top 10ZREVRANGE leaderboard:game1 0 9 WITHSCORES# Get player rankZREVRANK leaderboard:game1 "player:123"# Time-based data (score = timestamp)ZADD events:user:1234 1705329600 "login" 1705330000 "purchase"# Get events in time rangeZRANGEBYSCORE events:user:1234 1705329600 1705333200

Streams

  • Use for event streaming and log data
  • Supports consumer groups for distributed processing
# Add events to streamXADD events:orders * customer_id 1234 product_id 567 amount 99.99# Read from streamXREAD COUNT 10 STREAMS events:orders 0# Consumer groupsXGROUP CREATE events:orders order-processors $ MKSTREAMXREADGROUP GROUP order-processors worker1 COUNT 10 STREAMS events:orders ># Acknowledge processed messagesXACK events:orders order-processors 1234567890-0

Caching Patterns

Cache-Aside Pattern

# Pseudo-code for cache-asidedef get_user(user_id):    # Try cache first    cached = redis.get(f"cache:user:{user_id}")    if cached:        return json.loads(cached)    # Cache miss - fetch from database    user = database.get_user(user_id)    # Store in cache with expiration    redis.setex(f"cache:user:{user_id}", 3600, json.dumps(user))    return user

Write-Through Pattern

def update_user(user_id, data):    # Update database    database.update_user(user_id, data)    # Update cache    redis.setex(f"cache:user:{user_id}", 3600, json.dumps(data))

Cache Invalidation

# Delete specific cacheDEL cache:user:1234# Delete by pattern (use with caution in production)# Use SCAN instead of KEYS for large datasetsSCAN 0 MATCH cache:user:* COUNT 100# Tag-based invalidation using setsSADD cache:tags:user:1234 "cache:user:1234:profile" "cache:user:1234:orders"# Invalidate all related cachesSMEMBERS cache:tags:user:1234# Then delete each key

Expiration and Memory Management

TTL Best Practices

  • Always set TTL on cache keys
  • Use jitter to prevent thundering herd
  • Consider sliding expiration for session data
# Set with expirationSET cache:data:123 "value" EX 3600# Set expiration on existing keyEXPIRE cache:data:123 3600# Check TTLTTL cache:data:123# Persist key (remove expiration)PERSIST cache:data:123

Memory Management

# Check memory usageINFO memory# Get key memory usageMEMORY USAGE cache:large:object# Configure max memory policyCONFIG SET maxmemory 2gbCONFIG SET maxmemory-policy allkeys-lru

Transactions and Atomicity

MULTI/EXEC Transactions

# Transaction blockMULTIINCR stats:viewsLPUSH recent:views "page:123"EXEC# Watch for optimistic lockingWATCH user:1234:balancebalance = GET user:1234:balanceMULTISET user:1234:balance (balance - 100)EXEC

Lua Scripts

  • Use for complex atomic operations
  • Scripts execute atomically
-- Rate limiting scriptlocal key = KEYS[1]local limit = tonumber(ARGV[1])local window = tonumber(ARGV[2])local current = tonumber(redis.call('GET', key) or '0')if current >= limit then    return 0endredis.call('INCR', key)if current == 0 then    redis.call('EXPIRE', key, window)endreturn 1
# Execute Lua scriptEVAL "return redis.call('GET', KEYS[1])" 1 mykey

Pub/Sub and Messaging

# PublisherPUBLISH channel:notifications '{"type":"alert","message":"New order"}'# SubscriberSUBSCRIBE channel:notifications# Pattern subscriptionPSUBSCRIBE channel:*

High Availability

Replication

  • Use replicas for read scaling
  • Configure proper persistence on master
# On replicaREPLICAOF master_host 6379# Check replication statusINFO replication

Redis Sentinel

  • Use for automatic failover
  • Deploy at least 3 Sentinel instances

Redis Cluster

  • Use for horizontal scaling
  • Data automatically sharded across nodes
  • Use hash tags for related keys
# Hash tags ensure keys go to same slotSET {user:1234}:profile "data"SET {user:1234}:settings "data"

Persistence

RDB Snapshots

# Manual snapshotBGSAVE# Configure automatic snapshotsCONFIG SET save "900 1 300 10 60 10000"

AOF (Append-Only File)

# Enable AOFCONFIG SET appendonly yesCONFIG SET appendfsync everysec# Rewrite AOFBGREWRITEAOF

Security

  • Require authentication
  • Use TLS for connections
  • Bind to specific interfaces
  • Disable dangerous commands
# Set passwordCONFIG SET requirepass "your_strong_password"# AuthenticateAUTH your_strong_password# Rename dangerous commands (in redis.conf)rename-command FLUSHALL ""rename-command FLUSHDB ""rename-command KEYS ""

Monitoring

# Server infoINFO# Memory statsINFO memory# Client connectionsCLIENT LIST# Slow logSLOWLOG GET 10# Monitor commands (debug only)MONITOR# Key count per databaseINFO keyspace

Connection Management

  • Use connection pooling
  • Set appropriate timeouts
  • Handle reconnection gracefully
# Python example with connection poolimport redispool = redis.ConnectionPool(    host='localhost',    port=6379,    max_connections=50,    socket_timeout=5,    socket_connect_timeout=5)redis_client = redis.Redis(connection_pool=pool)

Performance Tips

  • Use pipelining for batch operations
  • Avoid large keys (>100KB values)
  • Use SCAN instead of KEYS in production
  • Monitor and optimize memory usage
  • Consider using RedisJSON for complex JSON operations
# Pipeline example (pseudo-code)pipe = redis.pipeline()pipe.get("key1")pipe.get("key2")pipe.set("key3", "value")results = pipe.execute()

Todos los archivos

1 archivos
SKILL.md 8.2k
Ver

Instalar redis-best-practices

Descarga y descomprime los archivos de las habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/Mindrally/skills/blob/main/redis-best-practices/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/. Claude la detectará automáticamente y la utilizará.
Repositorio mindrally/skills

Habilidades relacionadas

microservices-patterns
Tiempo actualizado 29 de junio de 2026
jpa-patterns
Tiempo actualizado 30 de junio de 2026
fabric-lakehouse
Tiempo actualizado 30 de junio de 2026
sql-pro
Tiempo actualizado 29 de junio de 2026
OR