PHP+Redisを使って簡単にアクセスランキングを実装
ブログなどでよく見かけるアクセスランキング。
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);
Author And Source
この問題について(PHP+Redisを使って簡単にアクセスランキングを実装), 我々は、より多くの情報をここで見つけました https://qiita.com/yudsuzuk/items/5b3f8ea10d9df474d009著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .