php redis处理并发问题

最近在弄并发问题,看到都是用redis队列处理并发的,所以我也弄弄看,用Linux的webbench模拟并发请求,但我发现使用redis速度很慢,只是简单的读取数据操作lget()操作都要1秒钟,循环入队1000次的时间也只是1秒多一点,然后在模拟并发的时候,使用redis处理1000个并发请求,用时16秒,但我直接操作数据库也才12秒而已。
问题1:为什么直接操作数据库会比使用redis缓存快?
问题2:为什么redis的一个读操作都要至少1秒?
下面贴接口代码

redis处理接口:

public function redis_qianghuo(){
        $redis = $this->Redis();
        //查询库存
        if($redis->lLen('goods_list') == 0)
            $this->ajaxReturn('商品已售完...');
        $uid = $_SERVER['REMOTE_PORT'];
        //查询是否购买过
        if($redis->sIsMember('bought_list',$uid))
            $this->ajaxReturn('你已经购买过了!');
        $goods_id = $redis->rpop('goods_list');
        $redis->sAdd('bought_list',$uid);
        $value = array(
            'uid'   =>  $uid,
            'goods_id'   =>  $goods_id,
            'time'  =>  time(),
        );
        $redis->hSet('order_info',$uid,json_encode($value));
        $this->ajaxReturn('购买成功。');
    }

sql处理接口:

public function sql_qianghuo(){
        $order_model = M('order');
        $goods_model = M('goods');
        M()->startTrans();
        //查询库存
        if($goods_model->lock(true)->find(1)['goods_num'] == 0)
            $this->ajaxReturn('商品已售完...');
        $uid = $_SERVER['REMOTE_PORT'];
        //查询是否购买过
        if($order_model->where(array('uid'=>$uid))->find())
            $this->ajaxReturn('你已经购买过了!');
        $value = array(
            'uid'   =>  $uid,
            'time'  =>  time(),
        );
        $order_model->add($value);
        $goods_model->where(array('id'=>1))->lock(true)->setDec('goods_num',1);
        M()->commit();
        $this->ajaxReturn('购买成功。');
    }
米琪卡哇伊
浏览 520回答 3
3回答

千巷猫影

首先你确定你本地配置没有问题?如果单个的读取都能达到1秒那肯定本地配置有问题

料青山看我应如是

1秒是肯定有问题的 首先判断配置是否存在问题,redis是内存数据库,所以内存要可以,本身需要消耗内存,另外存储数据库也需要内存 redis存储的这个数据的长度 *另外其实在线上的服务redis也是需要有连接池的,包括mysql 可以参考phpcp和360的mysql连接池 其实应该主要是环境配置的问题
打开App,查看更多内容
随时随地看视频慕课网APP