Перебирая отсортированный набор redis для обновления таблицы активных записей - PullRequest
2 голосов
/ 02 марта 2012

Я использую redis для отслеживания ежедневных просмотров темы на доске объявлений, которую я создаю. У меня есть другое поле в предметной модели, которое хранит все временные представления для предмета.

Я использую отсортированный набор для отслеживания видов, потому что он позволяет мне легко и быстро отображать самые популярные темы на сегодняшний день.

Я хочу создать задачу, которая будет выполняться в полночь - итерация по отсортированному набору - добавление подсчетов просмотров для определенного предмета в тот же день к предметам во всех представлениях времени. Затем я хочу удалить участника после того, как я обновил представления этой темы.

Что представляет собой элегантный способ перебора всех элементов в отсортированном списке и обновления их связанной (по идентификатору) сущности активной записи?

Вот как я добавляю представление для темы:

def self.record_view(id)
  REDIS.zincrby("views", 1, id)
end

Вот как я получаю количество просмотров для предмета:

def views
   REDIS.zscore("views", self.id).to_i
end

1 Ответ

4 голосов
/ 02 марта 2012

Вы можете использовать ZRANGE и WITHSCORES для получения всех ключей и баллов в землю Ruby, где вы можете итерировать их любым удобным для вас способом.

REDIS.zrange('views', 0, -1, withscores: true)
# => an array, [key1, score1, key2, score2, ...]

Вы также можете быть умным и использовать ZRANGE с ZCARD для получения данных в пакетном режиме.

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