php redis并发读写,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('购买成功。');

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值