PHP Redis秒杀抢购

1 篇文章 0 订阅

String类型:

Apache并发请求
-c 客户端 -n请求数量
ab.exe -c700 -n6000 192.168.88.151:82/文件名.php

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//对某一个键加锁
$redis->watch('sales');
//redis 开启事务
$redis->multi();
try {

    //获取销量
    $sales = $redis->get('sales');
    //总库存
    $store = 100;
    if ($sales >= $store) {
        $redis->incrBy('error_count', 1); //未抢到数量
        exit('库存不足'); //跳转活动结束页面
    }
    $redis->incrBy('sales', 1); //销量加1
    //执行事务
    $res = $redis->exec();
} catch (\Exception $e) {
    //回滚事务
    $redis->discard();

}

set类型:先预约获取秒杀资格

Apache并发请求
-c 客户端 -n请求数量
ab.exe -c700 -n6000 192.168.88.151:82/文件名.php

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

//模拟预约用户
for ($i=0;$i<100;$i++){
    $redis->sAdd('sadd','time_'.$i);
}

//判断值是否存在
$round = mt_rand(0, 200);
$rounds = 'time_' . $round;
//键加锁
$redis->watch('sadd');
//判断是否是预约用户
if ($redis->sIsMember('sadd', $rounds)) {
    //抢购数量
    $rob_total = 100;
    if ($redis->incrBy('count', 1) <= $rob_total) {
        //移除队列
        $redis->sRem('sadd', $rounds);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值