秒杀系统的问题
1.短时间内服务负载高
2.高并发超卖
$redis = new \Redis();
if ($redis->connect('127.0.0.1','6379') == false) {
die($redis->getLastError());
}
使用redis的原子性操作,保证不多抢
- if($_GET['flag']){
- $redis->set('flag',10);exit;
- }
- $key_r = $redis->decr('flag');//利用redis的原子性操作,保证不多抢
- if ($key_r < 0) {
- } else {
- //抢到了
- $value="test".rand("1","20");
- $redis->zAdd('demo',$redis->get('flag'),$value);
- $rs=$redis->zRange('demo',0,-1);
- //print_r($key_r);
- if(count($rs)+$key_r<10){
- $redis->set('flag',$key_r+1);
- }
- }