高并发一致性解决方案
来源:互联网 发布:淘宝收货地址怎么定位 编辑:程序博客网 时间:2024/06/06 06:37
高并发场景有抢红包,双十一抢商品等。
如何去处理这些高并发场景呢?
1.从存储介质考虑:有内存缓存和磁盘缓存,内存缓存的速度是比磁盘缓存要高出几十倍的,因此可以考虑存储介质在内存上。想象一下如果抢红包的时候同时有2万个请求到达服务器,我相信使用数据库来储存这些红包数据的话,服务器会爆掉的,就算不爆掉,请求超时也是意料之中的,因此需要采用内存缓存的方式来处理这么多请求,将数据暂时存储在内存中,当红包抢完的时候再将内存中的数据通过事物操作,一次性写入到数据库中。
2.从数据一致性考虑:同时有2万个请求请求红包,这些请求都是对同一个红包进行红包总额的减法操作,因此存在公共数据访问的并发问题。处理并发问题有两种方式:第一是悲观锁(独占锁),第二是乐观锁(可重入锁)。第一种锁独占锁是一种阻塞情况最为严重的方式,就是给数据加上独占锁,其他线程想写这个数据的话就会被挂起,只有获取这个数据的线程才有权限写入这个数据,这样的话就存在大量线程挂起,和竞争锁的情况对于cpu是极大的消耗,效率低下。
第二种是给数据添加一个版本标识,每当有线程对其进行修改那么就把版本加一,这样当线程进行非原子操作的时候,一开始就保存了版本号,进行到修改数据的时候比较一下最新的版本号和久版本号是否一样,一样就修改不一样就重试(次数重试和时间重试两种)。
3.从计算机硬件考虑。单台服务器不可靠,坏了一台就可能导致服务不能使用,因此可采用主从架构或者是哨兵模式。
服务器使用SpringMVC+spring+myBatis+Redis架构
Redis可以用来进行内存缓存,独占锁的实现是在sql语句上实现的,对行锁定。可重入锁是代码实现,判定旧版本号是否和新的一致,不一致重试。
- 高并发一致性解决方案
- 并发 - java高并发解决方案
- 高并发架构解决方案
- WEB高并发解决方案
- 高并发解决方案
- java高并发解决方案
- 高并发解决方案2
- java高并发解决方案
- 高并发网站解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- java高并发解决方案
- 高并发网站解决方案
- 第九届山东理工大学ACM网络编程擂台赛 正式赛 sdut4075GCD
- Java面向对象学习笔记
- PAT1031
- 1到10所有数的平方
- 设计模式实践系列 (2)
- 高并发一致性解决方案
- 高精度gettimeofday()函数用法
- Android 使用librtmp推流【音频采集模块】
- POJ2063---Investment(完全背包)
- HDU3015(树状数组+离散)详解版
- QT 使用qtcreator编写第一个登录程序
- .net linq
- Java文件压缩代码
- Linux下文件描述符配置