redisを使用してpv、uv、click統計を作成する

4910 ワード

redisリアルタイム統計設計構想:1、フロントエンドsmartyプラグイン(smarty_function_murl)は、ウェブサイトのすべての接続にurlidを生成し、バックエンドは取得したパラメータに基づいて必要なデータをredisに格納する.2、バックエンドプラグイン(smarty_function_aurl)は、urlidをredisに転送してデータを取得する.3、定期的にデータを出て関係データベースに保存し、redis記録をクリアして支出を削減する事業部がなくなり、他の組織に編入されたので、これは私は仕事をやめて、考え方とコードを共有しました.
 
<?php

/**

     *    redis   

     * @staticvar \Redis $_redis

     * @param int $database redis   

     * @return \Redis

     */

    public function redisw($database = 2) {

        static $_redis_w;

        if (is_null($_redis_w) || !($_redis_w instanceof \Redis)) {

            $_redis_w = new \Redis;

            $_redis_w->pconnect("xx.xx.xx.xxx:8301");

            $_redis_w->auth('abc');

        }

        $_redis_w->select($database);

        return $_redis_w;

    }

 

    /**

     *      redis   

     * @staticvar \Redis $_redis

     * @param int $database redis   

     * @return \Redis

     */

    public function redisr($database = 2) {

        static $_redis_r;

        if (is_null($_redis_r) || !($_redis_r instanceof \Redis)) {

            $_redis_r = new \Redis;

            $_redis_w->pconnect("xx.xx.xx.xxx:8301");

            $_redis_r->auth('abc');

        }

        $_redis_r->select($database);

        return $_redis_r;

    }

 

    //     

    public function __destruct() {

         

    }

    /**

     *    pv  

     * @param string $day

     *     ,        (20121220)

     * @return int

     */

    public function pv($day=null)

    {

       if(empty($day))

           $day = $this->_key;

        $key=$this->_pv_key.$this->_key;

        return $this->_redisr->zcard($key);

         

    }

    /*

     *     uv

     * @param string $day

     *     ,        (  =20121220)

     * @return int

     */

    public function uv($day=null)

    {

       if(empty($day))

           $day = $this->_key;

        $key=$this->_hs_key.$this->_key;

        return count($this->_redisr->keys($key."*"));

    }

    /*

     *      pv,uv  

     * @param string $type,     ,  {pv、uv、ck}

     * @param string $key,   key    {$urlid\},       key

     * @param int    $start     ,     ,      

     * @param init  $end       ,       

     * $return int

     */

    public function pvslot($type='pv',$key=null,$start=0,$end=0)

    {

        $pv=$uv=0;

        $pv_arr=array();

        if(empty($key))

            $key =  $this->_homepage_key;

        if($start==0)

            $start = strtotime (date('Ymd' . '00:00:01'));

        if($end==0)

            $end = $this->_time;

        //  pv   

        $pv_arr = $this->_redisr->zrangebyscore($this->_url_key.$key, $start, $end);

        $pv=count($pv_arr);

        if($type=='pv')

            return $pv;

        //  uv   

        $uv_arr = array();       

        if ($pv > 0) {

            //direct::10.2.5.186::1356073254::ju82lv4girj508udt0dv6bts72

            foreach ($pv_arr as $po):

                $po_ar = explode('::', $po);

                if (!in_array($po_ar[3], $uv_arr)) {

                    $uv_arr[] = $po_ar[3];

                }

            endforeach;

         $uv = count($uv_arr);

        }

        unset($pv_arr);

        unset($uv_arr);

        if($type=='uv')

            return $uv;

        //  ck   

        if($type=='ck')

            return count($this->_redisr->zrangebyscore($this->_ck_key.$key,$start,$end)); //url pv

    }

 

 

 

 

    /*

     * ip  

     */

    static function _ip() {

        foreach (array('HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'REMOTE_ADDR') as $p) {

            if (!empty($_SERVER[$p])) {

                return $_SERVER[$p];

            }

        }

    }

    /**

     *       

     * @return int

     */

    public function _time()

    {

        !$this->_time && $this->_time = time();

        return $this->_time;

    }

 }

  

    /*

         * pv  

         * ==    ==

         * r->zdd( ,   ,url:sid) ;

         *      pv :r->zcard(  ) return int;

         *           pv   r->zcount( ,     ,     ) return int;

         *         pv     r->zrangebyscore( ,     ,     ) return array;         >10 >mysql,  

         * == url  pv==

         * $_redis->zadd(url,   ,$ip.'::'.$sid));//value       

         *     url pv :r->zcard(url) return int;

         *     url      pv   r->zcount(url,     ,     ) return int;

         *         pv     r->zrangebyscore(url,     ,     ) return array;         >10 >mysql,  

         * ==  ==

         *         

         *   1       。

         *   1     mysql   。

         *   2   

         *

     *

     */

 

?>