К основному содержанию
скилл CX Codex

redis-best-practices — скилл для Claude Code: что даёт и установка

Набор практик и готовых паттернов для работы с Redis в Claude Code. Помогает настроить структуры данных, инвалидацию кэша и блокировки без ошибок.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill redis-best-practices -a claude-code
Открыть на GitHub

Что делает redis-best-practices

Скилл добавляет в контекст правила проектирования ключей и выбора структур в Redis. Он подсказывает, когда выгоднее взять хэш вместо строк и как настроить очереди через LPUSH и BRPOP. Отдельный блок посвящён потокам событий через XADD и группам потребителей.

В правилах есть проверенные шаблоны. Среди них — Cache-Aside и Write-Through, методы очистки кэша по тегам и защита от сбоев. Для атомарных операций предложены транзакции MULTI/EXEC и Lua-скрипты ограничения частоты запросов. При работе с Redis Cluster ключи обязательно группируются фигурными скобками вроде {user:1234}, иначе шардинг разнесёт связанные данные на разные узлы.

Команда KEYS в рекомендациях запрещена в пользу SCAN. Это убережёт продакшен от блокировок при поиске по маске.

Какие задачи решает

  • спроектировать пространства имён и ключи с двоеточием
  • реализовать паттерны Cache-Aside и Write-Through
  • настроить очередь задач через Redis Lists или Streams
  • написать Lua-скрипт для атомарного rate limiting
  • сконфигурировать TTL с джиттером для защиты от thundering herd

Примеры запросов агенту

  • Напиши функцию получения пользователя по паттерну Cache-Aside для Redis
  • Покажи пример Lua-скрипта для rate limiting с проверкой лимита и окна
  • Спроектируй структуру ключей и хэшей для профиля пользователя в Redis

Как установить redis-best-practices

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill redis-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/redis-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/redis-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора168

chrome-extension-development Ведёт агента по сборке расширений Chrome на Manifest V3: манифест, service worker, content scripts, попап, публикация в Chrome Web Store. CX Codex +1 2 800установок mysql-best-practices Скилл задаёт агенту правила проектирования схем MySQL, индексов и оптимизации запросов. Пригодится, когда агент пишет миграции или разбирает медленный запрос. CX Codex +1 2 700установок odoo-development Скилл для ИИ-агента, который подсказывает, как писать модули Odoo: модели на Python ORM, XML-представления, права доступа. CX Codex +1 2 300установок expo-react-native-typescript Скилл задаёт агенту правила разработки мобильных приложений на Expo, React Native и TypeScript: структура файлов, навигация, состояние, тесты. CX Codex +1 2 200установок machine-learning Скилл для разработки на JAX: подсказывает агенту функциональные приёмы, JIT и работу с ключами генератора случайных чисел. CX Codex +1 2 100установок typeorm Скилл задаёт агенту правила работы с TypeORM: сущности, связи, репозитории и миграции. Пригодится, когда проект на TypeScript с базой данных. CX Codex +1 2 000установок scrapy-web-scraping Скилл для ИИ-агента, который ведёт разработку краулеров на Scrapy: пауки, извлечение данных, пайплайны и настройки продакшена. CX Codex +1 2 000установок puppeteer-automation Скилл для браузерной автоматизации на Puppeteer: навигация, клики, скриншоты, PDF и перехват сетевых запросов в headless Chrome. CX Codex +1 1 800установок

Похожие

redis-core Redis, Inc. Скилл подсказывает агенту, какой тип данных Redis выбрать под задачу и как назвать ключи. Пригодится при проектировании кэша, счётчиков и сессий. CX Codex +1 4 000установок redis-clustering Redis, Inc. Подсказывает, как разложить ключи по слотам Redis Cluster и снять нагрузку чтения с праймари. Пригодится, когда ловишь CROSSSLOT на MGET или проектируешь ключи заранее. CX Codex +1 1 800установок redis devops-skills Скилл для настройки Redis: кеш, очереди, Sentinel, кластер. Пригодится, когда агенту нужно развернуть или подкрутить Redis в проекте. CX Codex +1 379установок redis-patterns affaan-m Готовые паттерны Redis для бэкенда: кэширование, распределённые блокировки, скользящий rate limiting и работа со стримами. CX Codex +1 4 700установок redis-js upstash Справочник по библиотеке @upstash/redis для бессерверных сред. Помогает ИИ-агенту писать запросы к Redis без лишней ручной сериализации. CX Codex +1 1 500установок bun-redis secondsky Скилл подсказывает агенту, как подключить Redis в проекте на Bun: клиенты, кеш, pub/sub, сессии. CX Codex +1 388установок

Рядом в теме «Бэкенд и API»

Всё по теме «Бэкенд и API» →

Вопросы о redis-best-practices

Как установить redis-best-practices в Claude Code?

Выполните команду npx skills add Mindrally/skills --skill redis-best-practices -a claude-code в терминале.

Что делает скилл redis-best-practices?

Он передаёт агенту правила именования ключей, выбор типов данных и готовые паттерны кэширования. В него входят примеры работы со Strings, Hashes, Lists, Sets, Streams и скрипты атомарных операций.

Как скилл рекомендует искать ключи по шаблону?

Вместо блокирующей команды KEYS скилл требует использовать SCAN с параметрами MATCH и COUNT. Это исключает остановку сервера при обходе базы.

Исходный текст

SKILL.md · Apache-2.0
---
name: redis-best-practices
description: Redis development best practices for caching, data structures, and high-performance key-value operations
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# 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 examples
user:1234:profile
user:1234:sessions
order:5678:items
cache:api:products:list
queue:email:pending
session:abc123def456
rate_limit:api:user:1234
```

## Data Structures

### Strings

- Use for simple key-value storage, counters, and caching
- Consider using MGET/MSET for batch operations

```redis
# Simple caching
SET cache:user:1234 '{"name":"John","email":"[email protected]"}' EX 3600

# Counters
INCR stats:pageviews:homepage
INCRBY stats:downloads:file123 5

# Atomic operations
SETNX lock:resource:456 "owner:abc" EX 30
```

### Hashes

- Use for objects with multiple fields
- More memory-efficient than multiple string keys
- Supports partial updates

```redis
# Store user profile
HSET user:1234 name "John Doe" email "[email protected]" created_at "2024-01-15"

# Get specific fields
HGET user:1234 email
HMGET user:1234 name email

# Increment numeric fields
HINCRBY user:1234 login_count 1

# Get all fields
HGETALL user:1234
```

### Lists

- Use for queues, recent items, and activity feeds
- Consider blocking operations for queue consumers

```redis
# Message queue
LPUSH queue:emails '{"to":"[email protected]","subject":"Welcome"}'
RPOP queue:emails

# Blocking pop for workers
BRPOP queue:emails 30

# Recent activity (keep last 100)
LPUSH user:1234:activity "viewed product 567"
LTRIM user:1234:activity 0 99

# Get recent items
LRANGE user:1234:activity 0 9
```

### Sets

- Use for unique collections, tags, and relationships
- Supports set operations (union, intersection, difference)

```redis
# User tags/interests
SADD user:1234:interests "technology" "music" "travel"

# Check membership
SISMEMBER user:1234:interests "music"

# Find common interests
SINTER user:1234:interests user:5678:interests

# Online users tracking
SADD 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

```redis
# Leaderboard
ZADD leaderboard:game1 1500 "player:123" 2000 "player:456" 1800 "player:789"

# Get top 10
ZREVRANGE leaderboard:game1 0 9 WITHSCORES

# Get player rank
ZREVRANK leaderboard:game1 "player:123"

# Time-based data (score = timestamp)
ZADD events:user:1234 1705329600 "login" 1705330000 "purchase"

# Get events in time range
ZRANGEBYSCORE events:user:1234 1705329600 1705333200
```

### Streams

- Use for event streaming and log data
- Supports consumer groups for distributed processing

```redis
# Add events to stream
XADD events:orders * customer_id 1234 product_id 567 amount 99.99

# Read from stream
XREAD COUNT 10 STREAMS events:orders 0

# Consumer groups
XGROUP CREATE events:orders order-processors $ MKSTREAM
XREADGROUP GROUP order-processors worker1 COUNT 10 STREAMS events:orders >

# Acknowledge processed messages
XACK events:orders order-processors 1234567890-0
```

## Caching Patterns

### Cache-Aside Pattern

```python
# Pseudo-code for cache-aside
def 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

```python
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

```redis
# Delete specific cache
DEL cache:user:1234

# Delete by pattern (use with caution in production)
# Use SCAN instead of KEYS for large datasets
SCAN 0 MATCH cache:user:* COUNT 100

# Tag-based invalidation using sets
SADD cache:tags:user:1234 "cache:user:1234:profile" "cache:user:1234:orders"
# Invalidate all related caches
SMEMBERS 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

```redis
# Set with expiration
SET cache:data:123 "value" EX 3600

# Set expiration on existing key
EXPIRE cache:data:123 3600

# Check TTL
TTL cache:data:123

# Persist key (remove expiration)
PERSIST cache:data:123
```

### Memory Management

```redis
# Check memory usage
INFO memory

# Get key memory usage
MEMORY USAGE cache:large:object

# Configure max memory policy
CONFIG SET maxmemory 2gb
CONFIG SET maxmemory-policy allkeys-lru
```

## Transactions and Atomicity

### MULTI/EXEC Transactions

```redis
# Transaction block
MULTI
INCR stats:views
LPUSH recent:views "page:123"
EXEC

# Watch for optimistic locking
WATCH user:1234:balance
balance = GET user:1234:balance
MULTI
SET user:1234:balance (balance - 100)
EXEC
```

### Lua Scripts

- Use for complex atomic operations
- Scripts execute atomically

```lua
-- Rate limiting script
local 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 0
end

redis.call('INCR', key)
if current == 0 then
    redis.call('EXPIRE', key, window)
end

return 1
```

```redis
# Execute Lua script
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
```

## Pub/Sub and Messaging

```redis
# Publisher
PUBLISH channel:notifications '{"type":"alert","message":"New order"}'

# Subscriber
SUBSCRIBE channel:notifications

# Pattern subscription
PSUBSCRIBE channel:*
```

## High Availability

### Replication

- Use replicas for read scaling
- Configure proper persistence on master

```redis
# On replica
REPLICAOF master_host 6379

# Check replication status
INFO 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

```redis
# Hash tags ensure keys go to same slot
SET {user:1234}:profile "data"
SET {user:1234}:settings "data"
```

## Persistence

### RDB Snapshots

```redis
# Manual snapshot
BGSAVE

# Configure automatic snapshots
CONFIG SET save "900 1 300 10 60 10000"
```

### AOF (Append-Only File)

```redis
# Enable AOF
CONFIG SET appendonly yes
CONFIG SET appendfsync everysec

# Rewrite AOF
BGREWRITEAOF
```

## Security

- Require authentication
- Use TLS for connections
- Bind to specific interfaces
- Disable dangerous commands

```redis
# Set password
CONFIG SET requirepass "your_strong_password"

# Authenticate
AUTH your_strong_password

# Rename dangerous commands (in redis.conf)
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
```

## Monitoring

```redis
# Server info
INFO

# Memory stats
INFO memory

# Client connections
CLIENT LIST

# Slow log
SLOWLOG GET 10

# Monitor commands (debug only)
MONITOR

# Key count per database
INFO keyspace
```

## Connection Management

- Use connection pooling
- Set appropriate timeouts
- Handle reconnection gracefully

```python
# Python example with connection pool
import redis

pool = 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

```redis
# Pipeline example (pseudo-code)
pipe = redis.pipeline()
pipe.get("key1")
pipe.get("key2")
pipe.set("key3", "value")
results = pipe.execute()
```

© Mindrally · Apache-2.0 · Mindrally/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой