高并发一致性解决方案

高并发场景有抢红包,双十一抢商品等。

如何去处理这些高并发场景呢?
1.从存储介质考虑:有内存缓存和磁盘缓存,内存缓存的速度是比磁盘缓存要高出几十倍的,因此可以考虑存储介质在内存上。想象一下如果抢红包的时候同时有2万个请求到达服务器,我相信使用数据库来储存这些红包数据的话,服务器会爆掉的,就算不爆掉,请求超时也是意料之中的,因此需要采用内存缓存的方式来处理这么多请求,将数据暂时存储在内存中,当红包抢完的时候再将内存中的数据通过事物操作,一次性写入到数据库中。
2.从数据一致性考虑:同时有2万个请求请求红包,这些请求都是对同一个红包进行红包总额的减法操作,因此存在公共数据访问的并发问题。处理并发问题有两种方式:第一是悲观锁(独占锁),第二是乐观锁(可重入锁)。第一种锁独占锁是一种阻塞情况最为严重的方式,就是给数据加上独占锁,其他线程想写这个数据的话就会被挂起,只有获取这个数据的线程才有权限写入这个数据,这样的话就存在大量线程挂起,和竞争锁的情况对于cpu是极大的消耗,效率低下。
第二种是给数据添加一个版本标识,每当有线程对其进行修改那么就把版本加一,这样当线程进行非原子操作的时候,一开始就保存了版本号,进行到修改数据的时候比较一下最新的版本号和久版本号是否一样,一样就修改不一样就重试(次数重试和时间重试两种)。
3.从计算机硬件考虑。单台服务器不可靠,坏了一台就可能导致服务不能使用,因此可采用主从架构或者是哨兵模式。

服务器使用SpringMVC+spring+myBatis+Redis架构

Redis可以用来进行内存缓存,独占锁的实现是在sql语句上实现的,对行锁定。可重入锁是代码实现,判定旧版本号是否和新的一致,不一致重试。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值