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);
}
}