Больше, чем кэш
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.