您的位置:首页 > 其它

你们部署服务器是几台,并发量是多大;怎么进行模拟抢购的同一时间请求量是多少;怎么防止带刷(黄牛)如果说部署两台服务器 不同的进程 怎么实现乐观锁?

2019-04-03 22:22 1416 查看

Django项目用到5台服务器。部署在2台上面,因为用户量比较少。

模拟抢购主要解决2个问题:
1.高并发对数据库产生的压力
2.竞争状态下如何解决库存的正确减少("超卖"问题)
对于第一个问题可以使用redis解决,避免对数据库的直接操作较少数据防护的查询压力。

对于“超卖”项目中使用的是“乐观锁”解决的。

防止黄牛代刷是个开放题目,下面提供几种思路:

对于一个账号,一次发起多个请求。
在程序入口处,一个账号只允许接受1个请求,其他请求过滤。实现方案,可以通过Redis这种内存缓存服务,写入一个标志位(只允许1个请求写成功,结合watch的乐观锁的特性),成功写入的则可以继续参加。

对于账号一次发送多个请求
可以检测机器的ip发送请求的频率,假如某个固定ip的频率特别高,就弹出验证码来减少请求的频率。

乐观锁的实现原理:
每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。
实现方式:可以在数据表中添加一个冗余字段,比如时间戳,在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突 。


订单待支付时数据库中数据减少不?
在创建订单时数据库中的商品数据已经减少,在订单未支付时数据库中的商品数据是没变化,只是把此订单中商品的信息展示而已

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐