https://blog.csdn.net/caomiao2006/article/details/38568825
https://blog.csdn.net/xiaolyuh123/article/details/79208959
https://juejin.im/entry/5964bcd851882568b20dbd73
大概查了一些解决方案,redis还是比mysql要好一些,但还是各种方法考虑一下
1.秒杀超卖使用mysql
延迟高
秒杀情况不能高频率读写数据库,会严重造成性能问题,必须使用缓存,如果卖出商品的数量是10,在缓存中设置一个计数器来记录请求数,只允许100个请求去请求付款接口,之后的全部提示秒杀结束,100个里面再看付款快慢来决定10个商品的归属。
update时需要加锁
主从数据库读写分离
使用事务防止超卖
beginTranse(开启事务)
try{
//quantity为请求减掉的库存数量
$dbca->query('update s_store set amount = amount - quantity where amount>=quantity and postID = 12345');
}catch($e Exception){
rollBack(回滚)
}
commit(提交事务)
不过这句sql是否不需要事务也是可以的=。=
2.redis
分布式环境需要一个分布式锁来控制只有一个服务去初始化库存
redis被清掉时需要立刻恢复
介个等研究好再来更新。。
附带一防止表单重复提交链接
https://blog.csdn.net/u013711961/article/details/70237515
网友评论