/**
* 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 accessLimit(String ip, int limit, int time, Jedis jedis) {
boolea

本文介绍了使用Redis解决库存秒杀问题和接口限流的方法。通过Redis的 incr 操作实现库存的原子性扣减,防止超卖。同时,讨论了非脚本和Lua脚本实现的接口限流策略,强调了Lua脚本在减少网络开销和确保原子性方面的优势。文章还提到了Redis在分布式限流中的应用,并分享了其他如Guava的RateLimiter等限流实现。
最低0.47元/天 解锁文章
466

被折叠的 条评论
为什么被折叠?



