LoginSignup
6
5

More than 5 years have passed since last update.

PHP+Redisを使って簡単にアクセスランキングを実装

Last updated at Posted at 2016-05-02

ブログなどでよく見かけるアクセスランキング。
Redisを使えば以下の流れで簡単にアクセスランキングを実装することができます。

※2016/11/29追記 ライブラリ化しました!
https://github.com/YuzuruS/redis-ranking

packagistに登録もしてあるので、composerを使って簡単にインストールできます。

composer.json
{
    "require": {
       "yuzuru-s/redis-ranking": "1.0.*"
    }
}

PVカウントアップ

記事にアクセスがあったらzincrbyで一部日付を持ったキーのスコアをインクリメント

count.php
// 記事ID $article_id にアクセスがあったら、スコアをインクリメント
$key = date('Ymd') . ':article:pv';
$Redis->zincrby($key, 1, $article_id);

// keyが溜まり続けるので、1ヶ月後に削除する
$Redis->setTimeout($key, 60 * 60 * 24 * 30);

集計

1週間(もしくは1ヶ月)分のデータをzUnionで合算
アクセスランキングを作成します。
日時バッチ等で実行してください。

collect.php
// 1週間分のPVを集計
$keys = [];
for ($i = 1;$i <= 7;$i++) {
    $keys[] = date('Ymd', strtotime("-{$i} day")) . ':article:pv';
}
$Redis->zUnion('weekly_article_pv', $keys);

アクセスランキングの取得

zRevRangeでアクセスランキングを取得

getRanking.php
// アクセスランキングを取得
$ranking = $Redis->zRevRange('weekly_article_pv', 0, -1);
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5