抢购活动高并发的思路

写在前面:该文章的很多思路来自于张国栋同学,在此首先先他致谢;

1 活动名额递减的问题:()

                                  通过将商品的数量模拟成redis list的size的方法来控制名额的递减:

             比如说活动商品有100个,那么就往redis list中存放100个元素,比如“1”,“2”。。。。“100”

             每买一个抢一个商品就去redis list中取一个元素出来,这样list的size就减少1,代表名额减少1,当获取不到元素时说明      活动名额已经没有了,或者判断list的size来判断名额,或者获取的元素的值来判断。

              这样即便是高并发的情况下也不会出现,多个用户抢最后一个商品的并发问题和减少活动名额数据安全问题。

                                                 

                                                数据库名额和redis数据库名额的同步问题:

            数据库中改名额属于耗时并且涉及并发减少库存的安全问题,所以要异步去减少数据库的名额,并且要串行化。这边可以        使用单线程池来解决这个问题,Executors.newSingleThreadPool() 获取单线程线程池s。调用s.execute(Runalbe run),把数据      库减少库存的方法放进来(可以搞个内部类),因为时s是单线程的所以能够实现数据库减少活动名额的串行化。

2 乐观锁和悲观锁的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值