php是最好的语言

利用redis实现算法

public function redisConnect()
{
    $redis = new redis();
    $redis->connect('***', 6379);
    $redis->auth('***');
    $redis->select(6);
    return $redis;

}
public function rediaGetData($uid)
{

    $redis = $this->redisConnect();

    if($uid == 0){
        if($redis->exists('visitor_info_id')) {          //如果存在游客键
            $string = $redis->hGet('visitor_info_id','new_ids');
            $array = json_decode($string);
            $total = count($array);
            $page = (int)$redis->hGet('visitor_info_id','count');

            if($total == 0 || ($page%$total == 0 && $page !=0)){        //说明取完一轮数据 需要算法重新生成新数据
                $redis->hSet('visitor_info_id','count',0);
                $redis->publish('p_user_id','visitor_info_id');//发布出去
                $id = $this->redisCommon();
            }
            else{
                $id = $array[$page];
                $redis->hSet('visitor_info_id','count',$page+1);
            }
        }
        else{                               //如果不存在游客键
            $redis->publish('p_user_id','visitor_info_id');//发布出去
            $id = $this->redisCommon();//读取公共数据
        }
    }
    else{

        if($redis->exists($uid)) {          //如果存在这个用户的资料
            $string = $redis->hGet($uid,'new_ids');
            $array = json_decode($string);
            $total = count($array);
            $page = (int)$redis->hGet($uid,'count');

            if($total == 0 || ($page%$total == 0 && $page !=0)){        //说明取完一轮数据 需要算法重新生成新数据
                $redis->hSet($uid,'count',0);
                $redis->publish('p_user_id',$uid);//发布出去
                $id = $this->redisCommon();
            }
            else{
                $id = $array[$page];
                $redis->hSet($uid,'count',$page+1);
            }

        }
        else{                               //如果不存在这个用户的资料
            $redis->publish('p_user_id',$uid);//发布出去

            $id = $this->redisCommon();
        }
    }

    $result = $this->db->from('information')
        ->where_in('id',$id)
        ->order_by("rand()")
        ->get()
        ->result_array();

    return $result;
}
public function redisCommon($page = 5)
{
    $redis = $this->redisConnect();
    $page = (int)$redis->hGet('common','count');

    $string = $redis->hGet('common','new_ids');
    $array = json_decode($string);
    if(count($array) < $page) {
        $redis->hSet('common', 'count', 0);
        $page = 5;
    }
    else
        $redis->hSet('common', 'count', $page + 1);
    $id = $array[$page];
    return $id;
}


作者:xTao 分类:LNMP 浏览:2543 评论:0