Lua 嵌入 Redis 解决库存秒杀--接口限流

89 阅读1分钟
<?php
/**
 * Created by PhpStorm.
 * redis 销量超卖秒杀解决方案
 * redis 文档:http://doc.redisfans.com/
 * ab -n 10000 -c 3000  http://localhost/demo.php   模拟并发
 */

$redis = new Redis();
$redis->connect('127.0.0.1',6379);

//1. 对某一个键加锁,这个键是我们自己设置,起到监视作业
$redis->watch('sales');

//获取销量,清空sales 为0
$sales = $redis->get('sales');

//总库存
$store = 4;

if($sales>=$store){
    exit('已经被抢光了'); //跳转活动结束页面
}

//redis事务不会回滚,  开启事务
$redis->multi();
$redis->set('sales',$sales+1); //销量加1
$res  = $redis->exec();


if($res){
    //减库存
    include db.php; //数据库连接
    //执行sql ,减库存
}
exit;

=====================redis接口限流============================

非脚本实现

private boolean accessLim