Использование отсортированных наборов redis для поддержки ограниченного списка лучших пользователей (по баллам) - PullRequest
0 голосов
/ 01 июля 2018

Я бы хотел сохранить список 100 лучших пользователей (по оценке) в проекте Python, который я делаю. Я чувствую, что redis sorted sets может быть отличным инструментом для этой цели.

Однако я не хочу вести записи для каждого пользователя, который когда-либо набирал очки. Это было бы значительным sorted set, и я хотел бы только 100 лучших пользователей по совокупной оценке.

Оставаясь в рамках redis, есть ли способ использовать sorted sets для достижения этой цели?

Я знаю, что можно сделать lpush и ltrim в случае списков, но это гораздо более простой случай, когда сортировка по score не требуется. Итак, как мне это сделать?

Я понимаю, что на этот вопрос можно ответить и за пределами redis sorted sets, но redis sorted sets - отличный инструмент, и поэтому иллюстрирование примера ответа с их использованием было бы здорово для того, чего я пытаюсь достичь ,

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Top-K - это новый тип данных в RedisBloom. Он имеет простой набор команд и очень скудный. В некоторых тестах это было в пять раз быстрее и занимало менее 1% памяти, чем требовалось для сортированного набора. Вы можете узнать об этом здесь .

Redis опубликовал новый блог о решении Top-K.

0 голосов
/ 01 июля 2018

вы можете сделать это, но требуется некоторая настройка для правильного управления сортированным набором Top-100.

Алгоритм объясняется в https://www.cs.berkeley.edu/~satishr/cs270/sp11/rough-notes/Streaming-two.pdf (см. 1-й алгоритм). Я реализовал это некоторое время назад как модуль Redis (topk - https://github.com/RedisLabsModules/topk),, но это также должно быть осуществимо без обращения к API модулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...