Back to questions
Senior
5
Как будет выглядеть обновлённая схема Redis с timeout-worker для игр с ограничением времени?
Companies where asked
Hi Rockits
Answer from AI
sobes.tech AI
Для игр с ограничением времени в Redis можно использовать схему с ключами, которые автоматически истекают (TTL), и отдельным воркером, который отслеживает истечение времени и обрабатывает таймауты.
Обновлённая схема может выглядеть так:
- Для каждой игровой сессии создаётся ключ с уникальным ID и устанавливается TTL, равный времени ограничения.
- Воркер подписывается на события истечения ключей (используя Redis Keyspace Notifications).
- Когда ключ истекает, воркер получает уведомление и выполняет логику завершения игры (например, определяет победителя, обновляет статистику).
Пример настройки ключа с TTL в Go:
err := redisClient.Set(ctx, "game:session:12345", "active", time.Minute*5).Err()
if err != nil {
// обработка ошибки
}
Воркер слушает события истечения:
pubsub := redisClient.PSubscribe(ctx, "__keyevent@0__:expired")
for msg := range pubsub.Channel() {
if strings.HasPrefix(msg.Payload, "game:session:") {
sessionID := strings.TrimPrefix(msg.Payload, "game:session:")
// обработка таймаута сессии sessionID
}
}
Такой подход позволяет эффективно управлять временем игр и реагировать на таймауты без постоянного опроса.