بنقرة واحدة
redis-patterns
Apply Redis data structure, caching, and pub/sub patterns. Use when integrating Redis into a service.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Apply Redis data structure, caching, and pub/sub patterns. Use when integrating Redis into a service.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Manage GitHub Projects v2 board: add issues, update field values, and query board state. Use when managing project boards.
Run WCAG 2.2 Level AA accessibility audits against generated UI. Use when a story has ui:true or when asked to audit accessibility.
Generate a complete component file tree wired to design tokens with tests and Gherkin spec. Use when scaffolding a new UI component.
Extract Gherkin scenarios from story markdown files into runnable .feature files and generate step definition stubs. Use when syncing stories to test suites.
Read and write design tokens in W3C DTCG format (tokens.json) and emit CSS, Tailwind, and Mantine outputs. Use when modifying or generating design tokens.
Apply Docker and Docker Compose best practices for containerising services. Use when writing or reviewing Dockerfiles and compose configs.
| name | redis-patterns |
| description | Apply Redis data structure, caching, and pub/sub patterns. Use when integrating Redis into a service. |
{app}:{domain}:{entity}:{id}
# Examples:
myapp:user:session:usr_123
myapp:product:cache:prod_456
myapp:rate:api:ip_1.2.3.4
myapp:queue:emails:pending
async function getUser(id: string): Promise<User> {
const key = `myapp:user:data:${id}`;
const ttl = 3600; // 1 hour
// Try cache first
const cached = await redis.get(key);
if (cached) {
return JSON.parse(cached) as User;
}
// Cache miss — fetch from DB
const user = await db.users.findById(id);
if (!user) throw new Error('User not found');
// Store in cache with TTL
await redis.setex(key, ttl, JSON.stringify(user));
return user;
}
// Invalidate on update
async function updateUser(id: string, data: Partial<User>): Promise<User> {
const user = await db.users.update(id, data);
await redis.del(`myapp:user:data:${id}`);
return user;
}
async function rateLimit(ip: string, limit: number, windowSeconds: number): Promise<boolean> {
const key = `myapp:rate:api:${ip}`;
const now = Date.now();
const windowStart = now - (windowSeconds * 1000);
const pipeline = redis.pipeline();
pipeline.zremrangebyscore(key, 0, windowStart);
pipeline.zadd(key, now, `${now}`);
pipeline.zcard(key);
pipeline.expire(key, windowSeconds);
const results = await pipeline.exec();
const count = results?.[2]?.[1] as number;
return count <= limit;
}
// Using ioredis with connect-redis
import session from 'express-session';
import RedisStore from 'connect-redis';
app.use(session({
store: new RedisStore({ client: redis }),
secret: process.env.SESSION_SECRET!,
resave: false,
saveUninitialized: false,
cookie: {
secure: process.env.NODE_ENV === 'production',
httpOnly: true,
maxAge: 1000 * 60 * 60 * 24, // 24 hours
}
}));
{app}:{domain}:{entity}:{id}.redis-cli info memory and redis-cli monitor (dev only).maxmemory-policy allkeys-lru for cache-only Redis instances.