Sobes.tech
Назад к вопросам
Senior
6

Как будет выглядеть обновлённая схема Redis с timeout-worker для игр с ограничением времени?

Компании, где спрашивали
Hi Rockits

Ответ от нейросети

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
    }
}

Такой подход позволяет эффективно управлять временем игр и реагировать на таймауты без постоянного опроса.