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の括弧の中のパスが事故っていたので、謎のコンパイルエラーが出ていました。
参考にして、非常にわかりやすいと思ったサイトは
このサイトなので、ぜひ参考にしてください。
とりあえず、ご飯を食べてきたいと思います。おわり