高并发的几个解决方案

2024-09-04 12:48
文章标签 解决方案 几个 并发

本文主要是介绍高并发的几个解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经过查资料,方案如下所示。
1  从最基础的地方做起,优化我们写的代码,减少必要的资源浪费。
         a、避免频繁的使用 new 对象,对于整个应用只需要存在一个实例的类,我们可以使用<a href= "https://www.baidu.com/s?wd=%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y1nAD3rjNbPHc4uyc4uH6z0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkrj61nHf4P1f3PHcsrHRzPH63"  target= "_blank"  class = "baidu-highlight" >单例模式</a>。对于String连接操作,使用      StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问。
         b、避免使用错误的方式,尽量不用 instanceof 做条件判断。使用java中效率高的类,比如ArrayList比Vector性能好。
2  html静态化
         我们通过一个链接地址访问,通过这个链接地址,服务器对应的模块处理这个请求,转到对应的jsp页面,最后生成我们要的数据。但是,如果上千万个请求的话,有太多的高并发请求,那么就会加重服务器的压力,最坏的情况是把服务器down掉。那么如何避免这种情况的出现呢?如果我们把最初对test. do 的请求结果保存成一个html文件,然后每次用户都去访问这个html文件,这样就不用再去访问服务器了,服务器的压力不就减少了?
         那如何自动的生成静态页面,当用户去访问,会自动的生成test.html ,然后再显示给用户。
3  图片服务器分离
         对于web服务器来说,图片是最消耗资源的,于是我们有必要把图片与页面进行分离,我们把图片放到独立的图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片的问题而崩溃。在图片服务器上,我们可以对不同的配置进行优化。
4  缓存
         具体接触过的缓存机制是hibernate的缓存机制。为了避免每次都向数据库中取得数据,我们把用户常常访问到的数据放到内存中,甚至缓存十分大的时候我们可以把内存中的缓存放到<a href= "https://www.baidu.com/s?wd=%E7%A1%AC%E7%9B%98&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y1nAD3rjNbPHc4uyc4uH6z0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkrj61nHf4P1f3PHcsrHRzPH63"  target= "_blank"  class = "baidu-highlight" >硬盘</a>中。还有高级的分布式缓存数据库使用,都可以增加系统的抗压力。
5  分批传送
         在做某项目的时候,一次传递的参数太多,而且数据库规定一次最多传递的参数最多是三万条,当时有五万条记录,那怎么传送呢?最终是分批传送,电梯里一次乘不下那么多的人,会报超重的bug,那就分批把人送上去。
         还有一次在考试系统中,如果那么多的考试人员同时提交到数据库中,数据库的压力增大,有时会被down掉,当时采用的方法是使用ajax异步传输,没有等待考生点击提交按钮的时候,就把考生的答案自动提交,这样也避免了突然断电考生前面做过的题出现丢失的现象。
6  数据库集群
         当面对复杂的应用,用户大量访问的时候,一台数据很快无法满足需求,于是我们需要使用数据库集群或者库表散列。
我们在应用程序中安装业务和应用或者功能模块将数据进行分离,不同的模块对应不同的数据库或表,再按照一定的策略对某个页面或者功能进行更小的数据库散列。
7  <a href= "https://www.baidu.com/s?wd=DB&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y1nAD3rjNbPHc4uyc4uH6z0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkrj61nHf4P1f3PHcsrHRzPH63"  target= "_blank"  class = "baidu-highlight" >DB</a>优化
         a、在<a href= "https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y1nAD3rjNbPHc4uyc4uH6z0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkrj61nHf4P1f3PHcsrHRzPH63"  target= "_blank"  class = "baidu-highlight" >数据库设计</a>的时候就要考虑到后期的维护,数据库三范式是我们设计数据库索要遵循的原则。
         b、索引的建立:建立索引要适当,如果一个表经常用来被查询,对于增加和修改很少被用到,我们就可以为这个表建立索引,因为对于增加和修改和删除操作时,我们对索引的维护要大大超过索引给我们带来的效率。
         c、表字段的类型选择要恰当
包括字段的长度、类型等,要根据实际存储的数据进行选择,长度不要过长,否则会影响效率。
         d、外键要慎用,因为主键代表这一张表,而外键代表一群表,对表之间进行了关联,在删除修改等需要我们关联。
         e、在数据库操作上
                 尽量使用prepareStatement,少用Statement,因为PrepareStatement是进行预编译的。
                 connection设置为readOnly,Connection是对书库连接,属于重量级,我们使用即可。
                 连接池的使用,我们可以修改数据库默认的连接数。

这篇关于高并发的几个解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136068

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作