| name | redis |
| description | Redis data structures, caching patterns, pub/sub, rate limiting, and session management |
| layer | domain |
| category | database |
| triggers | ["redis","caching","rate limiting","pub/sub","session store","redis cache","distributed lock"] |
| inputs | [{"use_case":"Caching, rate limiting, pub/sub, session management, queues"},{"requirements":"TTL policies, data structures, clustering needs"},{"client":"ioredis | redis (node-redis) | upstash (optional)"}] |
| outputs | [{"redis_client":"Client configuration and connection setup"},{"cache_patterns":"Caching strategies with invalidation"},{"data_structures":"Appropriate Redis data structure recommendations"},{"rate_limiter":"Rate limiting implementation"}] |
| linksTo | ["caching","nodejs","microservices","message-queues"] |
| linkedFrom | ["caching","authentication","ecommerce"] |
| preferredNextSkills | ["caching","nodejs"] |
| fallbackSkills | ["caching"] |
| riskLevel | low |
| memoryReadPolicy | selective |
| memoryWritePolicy | none |
| sideEffects | [] |
Redis Skill
Purpose
Implement Redis-backed caching, rate limiting, pub/sub messaging, session management, and distributed locks. This skill covers Redis data structures, caching patterns with proper invalidation, and serverless-compatible clients like Upstash. Redis is not just a cache -- it is a versatile data structure server.
Key Concepts
Data Structure Selection
STRING: Simple key-value. Counters, cache entries, session data.
SET key "value" EX 3600
HASH: Object-like fields. User profiles, settings, product details.
HSET user:123 name "Jane" email "jane@example.com"
LIST: Ordered collection. Activity feeds, queues, recent items.
LPUSH feed:user:123 "posted a comment"
SET: Unique collection. Tags, followers, online users.
SADD tags:post:456 "react" "nextjs" "typescript"
SORTED SET: Ranked collection. Leaderboards, rate limiting, priority queues.
ZADD leaderboard 1500 "user:123"
STREAM: Append-only log. Event sourcing, message queues.
XADD events * type "order.created" orderId "789"
When to Use Redis vs. Database
USE REDIS:
- Data that changes frequently and is read often (cache)
- Temporary data with TTL (sessions, OTP codes, rate limits)
- Real-time features (pub/sub, presence, typing indicators)
- Counters and aggregations (view counts, rate limits)
- Distributed locks (prevent concurrent operations)
USE DATABASE:
- Source of truth (orders, users, products)
- Complex queries (joins, aggregations, full-text search)
- Data that must survive restarts without rebuild
- Relational data with integrity constraints
Patterns
Client Setup
import Redis from 'ioredis';
export const redis = new Redis(process.env.REDIS_URL!, {
maxRetriesPerRequest: 3,
retryStrategy(times) {
const delay = Math.min(times * 50, 2000);
return delay;
},
: ,
});
{ } ;
redis = ({
: process..!,
: process..!,
});