Railsにredisを使ってPVランキングを実装した話

Redis周りのエラーは検索しても僕的には読みずらいので後世に残すために書いたよ

 

-やろうとしたことは、PV数ランキング順に並び替えて、PV数とそのタイトルを(上位2件)表示するというものです。

 

とりあえず、redisとはなんぞやと思ったので、ドットインストールでredisの映像を一通り見ましたが、PV数ランキング実装とは程遠いものに感じました。(基礎的なことは載っているのですが、俺が知りたいのはそんなことじゃない!irairaって感じでしたね)

 

もっとわかりやすいのはないのか!と思って検索に検索に検索をかけたところ、ありました。それは"公式ドキュメント"です。時間はかかりますが、めちゃめちゃわかりやすかった気がします。

 

よし、これで実装できると思い、学校にいる間ずっと頭の中で実装のイメージをしていました。

練りに練った実装アイディアを記述したところ、なんとエラー。。。。

 

実装した内容としては、githubを見ていただければわかると思うのですが、

↑githubURL

 

posts_controller.rb

のshowアクションにshowアクションにアクセスされるたびに、REDIS.zincrby を利用して、1追加していきます。

また、set_ranking_dataというメソッドを追加します。中身の処理としては、上位二件のランキングデータを所得して、そのidを@ranking_postsというインスタンス変数に渡します。

 

次に、表示したいページのビューをいじります。

index.html.erb

<% @ranking_posts.each do |post| %>
<p><%= link_to post.title, post_path(post.id) %></p>
<span><%= REDIS.zscore("posts/daily/#{Date.today.to_s}",post.id) %>PV</span>
<% end %>

以上のコードを記述してやれば終わりです。

ここで、zsoreの括弧の中のパスが事故っていたので、謎のコンパイルエラーが出ていました。

 

参考にして、非常にわかりやすいと思ったサイトは

http://o.inchiki.jp/obbr/307

このサイトなので、ぜひ参考にしてください。

 

とりあえず、ご飯を食べてきたいと思います。おわり