使用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吧!

广告
将在 10 秒后关闭
bannerAds