我正在使用redis来跟踪我正在构建的留言板中主题的每日观看次数。我在主题模型中有另一个字段,用于存储主题的所有时间视图。
我使用排序集来跟踪主题视图,因为它可以让我轻松快速地显示当今最受欢迎的主题。
我想创建一个在午夜运行的任务 - 遍历排序集 - 将当天特定主题的视图计数添加到主题所有时间视图。然后,我想在我更新该主题的观点后删除该成员。
迭代排序列表中的所有成员并更新其相关(按ID)活动记录实体的优雅方法是什么?
这就是我为主题添加视图的方式:
def self.record_view(id)
REDIS.zincrby("views", 1, id)
end
这就是我获取主题的观看次数的方式:
def views
REDIS.zscore("views", self.id).to_i
end
答案 0 :(得分:4)
您可以使用ZRANGE and WITHSCORES将所有密钥和分数放入Ruby域,您可以在其中以任意方式迭代它们。
REDIS.zrange('views', 0, -1, withscores: true)
# => an array, [key1, score1, key2, score2, ...]
您也可以聪明并使用ZRANGE和ZCARD批量获取数据。