美文网首页
秒杀(高并发)库存超卖 mysql和redis如何避免

秒杀(高并发)库存超卖 mysql和redis如何避免

作者: 小草_fdba | 来源:发表于2018-05-31 15:59 被阅读0次

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

相关文章

网友评论

      本文标题:秒杀(高并发)库存超卖 mysql和redis如何避免

      本文链接:https://www.haomeiwen.com/subject/yhhgjftx.html