Sobes.tech
Senior
33

Уақыт шектеулі ойындар үшін timeout-worker-пен жаңартылған Redis схемасы қандай болады?

Сұралған компаниялар
Hi Rockits

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

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