Java高并发处理方案
java高并发,如何解决,什么方式解决
一,什么是高并发?
二,高并发解决思路?
三,高并发解决方案?
一、什么是高并发
1.1 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
1.2 高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
1.2.1 响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
1.2.2 吞吐量:单位时间内处理的请求数量。
1.2.3 QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
1.2.4 并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
二,高并发解决思路
1,服务器网络带宽不够(增加网络带宽)
2,web线程连接数不够(DNS域名解析分发多台服务器,负载均衡,前置代理服务器nginx、apache等等)
3,数据库连接查询瓶颈(数据库查询优化,读写分离,分表等等)
4,尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能;用jprofiler等工具找出性能瓶颈,减少额外的开销。
5,优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
6,优化数据库结构,多做索引,提高查询效率。
7,统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
8,不要频繁的new对象,对于在整个应用中只需要存在一个实例的类推荐使用单例模式;对于String的连接操作,使用StringBuffer或者StringBuilder;对于utility类型的类通过静态方法来访问。
9,避免使用错误/异常的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要;不要使用 instanceof做条件判断,尽量使用比的条件判断方式;使用JAVA中效率高的类,比如ArrayList比Vector性能好。
10,出现超时的情况,一般说明并发数量已经超过了数据库所能处理的极限,数据库无限等待导致超时,此时,建议采用线程池的方案,支付宝的单号就是用的线程池的方案进行的。数据库 update 不是一次加1,而是一次加几百甚至上千,然后取到的这 1000个序号,放在线程池里慢慢分配即可,能应付任意大的并发,同时保证数据库没任何压力。
三、高并发的解决方法有:
1.并发锁
首先我们要知道高并发下会出现某一个时刻流量猛增,还有就是如果是抢购之类的库存类并发可能会导致超卖库存为负数之类的,对于并发锁来说主要是解决抢购超卖问题的,并不能很好的解决流量猛增给服务器带来的压力,有时候甚至会加重服务器的压力,所以我们并发量小及服务器配置比较高的时候可以用并发锁来处理,下面就介绍几种常用的并发锁
1.synchronize(同步排它锁)
这个对于java开发来说肯定不陌生,它可以让各个线程同步执行,缺点是极度的耗费性能,临时处理可以使用,经常使用的情况下不推荐
2.数据库锁
mysql数据库也是自带锁的,这种情况一般用行锁,不过这个会产生事务阻塞数据库,极度耗费性能,且容易造成死锁,一般在内部确定的极低的并发(一般就2个并发)的时候使用
2,使用redis 缓存
1,什么是redis?
Redis是一个开源(DBS许可)的,内存中的数据结构存储系统,他可以用作数据库,缓存和消息中间件,他支持多种类型的数据结构,如字符串(String),散列表(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
2,redis 特点?
Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability).
速度快: tomcat: 150-220/秒; nginx: 3-5万/秒 ;redis: 写 8.6万/秒 读 11.2万/秒 ~ 平均10万次秒
Java高并发处理方案相关推荐
- Java高并发处理总结
自己参考大牛博客及视频写了一些关于并发的感悟,高并发的处理思路,无外乎以下几种 1 代码层面: 锁优化措施(见本文内容).尽量简化事务和减少事务 2 应用层面:缓存 队列 限流 熔断 3数据库层面: ...
- spring boot 整合MQTT高并发处理方案
引入mqtt <dependency><groupId>org.springframework.boot</groupId><artifactId>sp ...
- 常见的高并发处理方案
一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相关的技术经过 ...
- php并发访问排队_PHP高并发处理方案
web资源防盗链 盗链是什么,为什么要防? 在自己页面上显示一些不是自己服务器的资源(图片.音频.视频.css.js等) 由于别人盗链你的资源会加重你的服务器负担,所以我们需要防止,而且会影响统计 防 ...
- 高并发处理方案_高并发系统下的缓存解决方案
什么样的数据适合做缓存? 缓存和DB数据一致性在之前已讲过,详细可参考下面阅读推荐<如何保障mysql和redis之间的数据一致性>,我们这里讲一讲缓存穿透.缓存雪崩和击穿的三种场景解决方 ...
- 使用Lua脚本实现高并发处理方案
我们使用 Lua 脚本可以很轻松构建出百万并发的应用系统. 由于 Tomcat 并发处理能力弱,nginx 并发处理能力强,我们可以在 nginx 上结合 Lua 脚本来高效处理业务逻辑,不用经过 T ...
- .NET6 高并发处理
.net6 高并发处理方案 .Net Core技术栈高并发秒杀的处理方案 高并发秒杀电商系统分析与设计原则 [视频]高并发处理思路分表分库.消息列队.缓存.Nginx 其它 .NET6 学习之旅
- redis高并发处理由浅入深(备java基础,javaee课程)-任亮-专题视频课程
redis高并发处理由浅入深(备java基础,javaee课程)-10331人已学习 课程介绍 Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache a ...
- 高并发处理之商品详情页
首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 高并发处理之商品详情页 卜大伟 2019-01-18 11:13:47 2488 收藏 ...
最新文章
- Package Manager Console 向VS2010安装 EntityFramework
- 华为s8600手机驱动_只有手机才能快充?华为MateBook X的灵巧快充解放你的续航焦虑-华为 ——快科技(驱动之家旗下媒体)-...
- Information Retrieval --- Outline
- 通过命令管理Windows7桌面防火墙
- 编程语言python怎么读-网红编程语言Python将纳入高考你怎么看?
- 处理模型——找到对应一个方向的旋转角
- 代码管理学:通过配置文件限制依赖关系
- 2017大学网考计算机b,(热)2017年4月网考 大学英语b网考 电大英语网考 计算机应用.doc...
- Linux | 文件系统 | Ext2fs
- 面向对象周总结1030
- 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
- 魅族mx5无法连接远程服务器,魅族mx5手机无法连接电脑怎么办
- 简化 Spring 控制器:只须写接口即可
- C语言——求三个数中最大值(6种方法)
- 通过Fiddler进行抓包并分析
- 好风凭借力,送我上青云
- bing的搜索框按回车是换行而不是搜索
- 用Python实现Excel表格的多对多批量替换
- selenium淘宝登录和滑块破解最新可用
- 深圳周边你还不知道的团队建设活动好地方-深圳公司团建好地方推荐
热门文章
- 计算机丢失d3dx9_41.dll,d3dx9_41.dll(支持64位)
- 串口示波器 serial_port_plotter 二次开发环境搭建(含 QT搭建)
- modbus网关都有哪些特点,modbus网关的功能及作用
- linux 下的光盘拷贝
- 理解extends与implements
- 3大军团、266个项目,菜鸟技术如何玩转双11项目管理?
- 【千锋Python2205班8.25笔记-day04-循环和列表】
- 一加手机html,一加万能工具包等待进入recovery的解决方法
- Flutter 云音乐
- mac下使用Homebrew安装nginx报错