phpで音速DBredisをbittmpで集計アクセスカウンターとして使う

2014年7月2日更新 view: 61 view
photoBy: http://redis.io/images/redis-300dpi.png

bitで集計してみる

参考
http://d.hatena.ne.jp/toritori0318/20140427/1398607011

スポンサードリンク

具体例

  • リアルタイムアクセスカウンター
  • raumen には2から4までのIDが入る
  • 'raumen:2:visit:2013-11-13','raumen:4:visit:2013-11-13','raumen:3:visit:2013-11-13' のキーを持つものを集計

実はphpredisのbitopメソッドは動かない。。。

まずはこれでハマった。全く動かない。
ということでオリジナルのメソッドを作る。

public function bitop( $operation, $retKey, $keys = array() )
    {
        $key = implode(' ',$keys);
        $output = shell_exec('redis-cli BITOP '.$operation.' '.$retKey.' '.$key);

        return $output;
    }

直接、コマンドラインを動かしちゃう。

コード

データを登録

まずは適当に登録してみる。
ラーメンID(記事のIDとか。):訪問日、ユーザーID、アクセス数 +1 に。

$this->Redis->setbit('raumen:2:visit:2013-11-12', 2, 1);
$this->Redis->setbit('raumen:2:visit:2013-11-13', 2, 1);
$this->Redis->setbit('raumen:2:visit:2013-11-13', 6, 1);
$this->Redis->setbit('raumen:3:visit:2013-11-13', 3, 1);
$this->Redis->setbit('raumen:4:visit:2013-11-13', 4, 1);
$this->Redis->setbit('raumen:4:visit:2013-11-13', 5, 1);

データカウント

$this->Redis->bitop('OR','visit:total',array('raumen:2:visit:2013-11-13','raumen:4:visit:2013-11-13','raumen:3:visit:2013-11-13'));
$res = $this->Redis->bitcount('visit:total');
pr($res);//5

とりあえず集計はできる。。。

問題点

  • わざわざユーザーID作る必要あるん?めんどいし、データを専有しちゃいそう。
  • インクリメントできない。

https://tech.bellycard.com/blog/light-speed-analytics-with-redis-bitmaps-and-lua/

にはインクリメントできるような事書いてあるけど、できない。

http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/
を見ると、日付とユーザーIDどんどん追加していいようなこと書いてあるけど。

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

4月26日 ( 木 ) にアクセスが多かった記事はこちら!