最近在弄并发问题,看到都是用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('购买成功。');
}