Например, у меня 10 000 пользователей, которые играют в игру. Каждый пользователь может выиграть или потерять очки во время игры несколькими (может быть 100 или 1000) раз в час. Мне нужно показать 10 лучших пользователей по очкам за последние 1 час. Список должен обновляться каждую минуту.Как реализовать пользователей на Redis с zsets
Так что мне нужно сохранить и обновить 60 (минут в час) zsets за каждую победу или проиграть. Старые zsets будут автоматически удалены по истечении срока действия.
Другой способ - сохранить пользовательские точки за минуту в hset (только один hincrby за каждую победу или проиграть) и пересчитать значения для zset, используя эти данные каждую минуту. В этом случае я должен принимать по 10 000 клавиш в минуту, удалять старые данные (старше одного часа) в каждом ключе, суммировать другие данные и создавать новые zset для отображения.
Оба случая не нравятся мне, потому что количество пользователей может увеличиться в несколько раз или другие вершины могут быть добавлены в будущем.
Может ли это реализовать другой способ в Редисе?
Чтобы уточнить, пытаетесь ли вы отображать десятку пользователей, отсортированных по сетевым точкам, полученным за последний час, или совокупный общий балл (если это применимо)? – rchang
Да, я пытаюсь показать пользователям отсортированные по сетевым точкам в течение последнего часа. – dkop