Redis caching expert for caching strategies, data structures, distributed locks, and rate limiting. Keywords: redis, cache, rate-limit, session, distributed-lock
Redis缓存专家。
import Redis from 'ioredis';
const redis = new Redis({
host: process.env.REDIS_HOST || 'localhost',
port: 6379
});
async function getUser(id: string) {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached);
const user = await db.query('SELECT * FROM users WHERE id = $1', [id]);
await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
return user;
}
async function rateLimit(key: string, limit: number, windowSeconds: number) {
const current = await redis.incr(key);
if (current === 1) await redis.expire(key, windowSeconds);
return { allowed: current <= limit, remaining: limit - current };
}
async function acquireLock(key: string, ttlMs: number) {
const token = crypto.randomUUID();
const acquired = await redis.set(key, token, 'PX', ttlMs, 'NX');
return acquired === 'OK' ? token : null;
}
// Strings
await redis.set('key', 'value');
await redis.setex('key', 3600, 'value');
// Hashes
await redis.hset('user:1', 'name', 'John');
// Lists
await redis.lpush('queue', 'item');
// Sorted Sets
await redis.zadd('leaderboard', 100, 'user1');