Назад к статьям

Redis в продакшене: кэширование, очереди и pub/sub

Как использовать Redis не только для кэша: очереди задач, rate limiting, distributed locks, pub/sub.

Больше, чем кэш

Redis — это не просто key-value store для кэширования. Это полноценная платформа с data structures.

Rate Limiting с Sorted Sets

func (r *RateLimiter) Allow(ctx context.Context, key string, limit int, window time.Duration) bool {
    now := time.Now().UnixNano()
    pipe := r.client.Pipeline()
    pipe.ZRemRangeByScore(ctx, key, "0", strconv.FormatInt(now-int64(window), 10))
    pipe.ZCard(ctx, key)
    pipe.ZAdd(ctx, key, redis.Z{Score: float64(now), Member: now})
    pipe.Expire(ctx, key, window)
    results, _ := pipe.Exec(ctx)
    count := results[1].(*redis.IntCmd).Val()
    return count < int64(limit)
}

Distributed Locks

SET NX с TTL для простых случаев. Redlock для распределённых систем. Всегда устанавливайте TTL — deadlock-free by design.

Pub/Sub для событий

Отлично для real-time нотификаций между сервисами. Но помните: нет гарантии доставки. Для критичных событий используйте Kafka.

Похожие статьи

Go · Architecture · API

Проектирование высоконагруженных API на Go

Разбираем архитектурные паттерны и подходы к созданию API, способного обрабатывать миллионы запросов.

Go · Clean Architecture · Best Practices

Чистая архитектура в Go: от теории к практике

Как применить принципы Clean Architecture в Go-проекте и не превратить код в Java-подобный boilerplate.