使用Redis-Object来实现简易排名功能
因为在网络上看到的那篇文章通过 article.id=1 的方式不太合适。
准备使用Redis对象
将redis-object添加到项目的gem中。
source 'https://rubygems.org' do
# use redis server
gem 'redis-objects', '1.2.0'
end
模型设定
包含redis-object。
除了sorted_set之外,其他的相关信息都记录在官方的README中,可以参考。
redis-objects::Github。
class Article < ActiveRecord::Base
include Redis::Objects
sorted_set :ranking, global: true
end
通过添加 global: true 的选项,可以将其保存为与id无关的键。
另外,还要创建一个实例方法来递增PV。
class Article < ActiveRecord::Base
# ~略~
def ranking_increment
ranking.increment(self.id)
end
end
每次从控制器调用 @article.ranking_increment,得分就会增加1点。
获取排名
在获取排名时,无需通过实例方法,以下即可。
# スコアの上位1-5を取得
Article.ranking.revrange(0,4)
由于 Article.ranking[0..4] 根据分数的大小进行排序,所以可以使用 revrange 进行获取。
只要您了解Redis,您可能会觉得Redis-Object很简单和方便,但由于方法的组织不是那么直观,所以您可能会认为用Redis自己实现会更容易理解。
尽情享受Redis吧!