🟡 Средний · 2 очк. Redis
Какую структуру данных Redis лучше использовать для лидерборда?
A List
B Set
C Sorted Set (ZSET)
D Hash
Объяснение вопроса

Для лидерборда идеально подходит Sorted Set (ZSET): элементы хранятся с числовым score и автоматически сортируются по нему.

Основные команды

ZADD leaderboard 100 "player1"   // добавить игрока с очками
ZADD leaderboard 250 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES  // топ-10 по убыванию
ZRANK leaderboard "player1"           // позиция (с 0)
ZINCRBY leaderboard 50 "player1"      // добавить очки

Почему не LIST или HASH

  • LIST - пришлось бы вручную сортировать и перезаписывать
  • HASH - нет встроенной сортировки по значению
  • ZSET - вставка и поиск по рангу за O(log N)

В Go с go-redis: client.ZAdd(ctx, "leaderboard", redis.Z{Score: 100, Member: "player1"}), client.ZRevRangeWithScores(ctx, "leaderboard", 0, 9).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.