CN112364061A - 一种基于mysql高并发访问数据库的方法 - Google Patents
一种基于mysql高并发访问数据库的方法 Download PDFInfo
- Publication number
- CN112364061A CN112364061A CN202011292200.0A CN202011292200A CN112364061A CN 112364061 A CN112364061 A CN 112364061A CN 202011292200 A CN202011292200 A CN 202011292200A CN 112364061 A CN112364061 A CN 112364061A
- Authority
- CN
- China
- Prior art keywords
- cache
- mysql
- database
- based high
- high concurrent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于mysql高并发访问数据库的方法,属于信息技术领域。本发明的基于mysql高并发访问数据库的方法在mysql上增加redis缓存,在读和写时,先进行缓存处理,若缓存失效则访问数据库,其中使用多个redis节点,主从节点搭配使用。该发明的基于mysql高并发访问数据库的方法能够有效避免缓存雪崩,缓存穿透,缓存击穿等问题,并能数据达到与数据库同步效果,具有很好的推广应用价值。
Description
技术领域
本发明涉及信息技术领域,具体提供一种基于mysql高并发访问数据库的方法。
背景技术
万物互联,数据为先。在这个信息爆炸的互联网时代,信息是最为重要的。用户数量在不断增长,必然与之相对应的数据的访问和存储量会呈指数增长。用mysql数据库来说,当并访问量足够多时,数据库可能会撑不住,所以引入了mysql主从分布集群部署。当同一时刻活跃的用户同时在某一平台开始进行信息交互,后端的数据访问骤增,所以如果是仅仅依靠mysql数据库来解决这个问题可能不太现实,所以引入了redis,redis是在存放在内存中的一种数据库,数据的读取速度很快。由于是单线程,所以不会引起太多的死锁问题。虽然引入了redis+mysql方式,但是会存在redis和mysql的数据读写问题。数据库引擎技术从IBM提出的关系模型到OracleMySQL的诞生,其中所经历的历程令人感概。之后MySQL原生的数据库引擎MyISAM开始占据市场,同时支持高并发的插入和查询,由于不支持事务,所以在很多场景下:如银行交易,金融领域都显得力不从心。所以引入Innodb引擎,Innodb引擎支持事务,虽然在查询上稍逊一筹,但是它是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系型数据库引擎所不能匹敌的。当然,数据库无论怎么发展总是要有瓶颈的,所以并行发展的redis横空出世,在内存中的redis拥有的查询修改操作速度都是无可匹敌的。随着时间推移与发展,大型的高并发访问和相对应需要解决的部署架构也应用而生,mysql集群部署,redis集群部署,mysql+redis等等,不同场景有不用用法,同时部署过多的服务虽然好处不少,但是,对于数据的同步依旧是一个很大的问题。
发明内容
本发明的技术任务是针对上述存在的问题,提供一种能够有效避免缓存雪崩,缓存穿透,缓存击穿等问题,并使数据达到与数据库同步效果的基于mysql高并发访问数据库的方法。
为实现上述目的,本发明提供了如下技术方案:
一种基于mysql高并发访问数据库的方法,该方法在mysql上增加redis缓存,在读和写时,先进行缓存处理,若缓存失效则访问数据库,其中使用多个redis节点,主从节点搭配使用。
Redis节点的个数可以根据实际的需要进行设定。
作为优选,传入数据时增加多个内存队列,动态调整,达到负载均衡。
作为优选,使用hash算法,对传入数据id值进行hash取余,选择特定的队列。
作为优选,进行写操作时,直接写入内存队列。
作为优选,进行读操作时,访问缓存。
作为优选,缓存循环从队列中取出读取命令,若为写命令,先删除缓存,写入数据库,写完数据库后同步redis,删除队列中的更新命令。
作为优选,读操作查询缓存时,若查询到缓存,直接返回客户端,若没查询到缓存,则刷新200ms继续查询缓存。
作为优选,继续查询缓存时,仍查询不到,则查询队列中是否存在要查询的原始,若存在,循环查询,等待时间不超过1min,超过依然存在报出异常,若不存在,查询数据,返回客户端,若查询到直接返回客户端。
作为优选,读操作在redis执行,写操作在数据库执行。如果写操作过于频繁,考虑mysql集群部署,其次如果redis失效,会造成雪崩,建议使用redis集群部署。
该基于mysql高并发访问数据库的方法读写分离,数据库写,redis读,增加内存队列,查询过程中增加等待时间和缓存刷新操作,先删除缓存再写数据库,之后需要更新内存队列。
与现有技术相比,本发明的基于mysql高并发访问数据库的方法具有以下突出的有益效果:采用redis和mysql集群部署,有效避免缓存雪崩,缓存穿透,缓存击穿等问题,其次推荐对mysql进行分库分表,有效处理热点操作数据,减少查询次数;采用读写分离技术,与之不同的是,对数据库写,对缓存读,增加内存队列,使得数据尽量达到100%缓存与数据库同步的效果,具有良好的推广应用价值。
附图说明
图1是本发明所述基于mysql高并发访问数据库的方法的流程图。
具体实施方式
下面将结合附图和实施例,对本发明的基于mysql高并发访问数据库的方法作进一步详细说明。
实施例
本发明的基于mysql高并发访问数据库的方法,在mysql上增加redis缓存,在读和写时,先进行缓存处理,若缓存失效则访问数据库,其中使用多个redis节点,主从节点搭配使用。
传入数据时增加多个内存队列,动态调整,达到负载均衡。使用hash算法,对传入数据id值进行hash取余,选择特定的队列。进行写操作时,直接写入内存队列。进行读操作时,访问缓存。缓存循环从队列中取出读取命令,若为写命令,先删除缓存,写入数据库,写完数据库后同步redis,删除队列中的更新命令。读操作查询缓存时,若查询到缓存,直接返回客户端,若没查询到缓存,则刷新200ms继续查询缓存。继续查询缓存时,仍查询不到,则查询队列中是否存在要查询的原始,若存在,循环查询,等待时间不超过1min,超过依然存在报出异常,若不存在,查询数据,返回客户端,若查询到直接返回客户端。读操作在redis执行,写操作在数据库执行。如果写操作过于频繁,考虑mysql集群部署,其次如果redis失效,会造成雪崩,建议使用redis集群部署。
该基于mysql高并发访问数据库的方法读写分离,数据库写,redis读,增加内存队列,查询过程中增加等待时间和缓存刷新操作,先删除缓存再写数据库,之后需要更新内存队列。
通常数据库访问分为三种:
1、每一天的实时并发量非常高;
2、正常访问;
3、某一天的时间节点并发量很高。
为了兼顾上面问题,在mysql上增加一层屏障,即增加redis缓存,无论是读还是写都需要先去缓存处理,如果缓存失效,再访问数据库。考虑到缓存失效,使用多个redis节点,主从节点搭配使用。在此基础上的优化为:
最开始传入数据时增加多个内存队列,动态调整,需要做到负载均衡,推荐使用hash算法,对传入数据id值进行hash取余,选择特定的队列。当有写操作时,直接写入内存队列。当有读操作时访问缓存。缓存循环从队列中取出读取命令,如果为写命令,先删除缓存:此处保留标志位(删除标识),写入数据库,写完数据库之后再同步redis,删除队列中的更新命令。如果为读操作查询缓存,若查询到缓存直接返回客户端,若没有查询到缓存,则刷新200ms,继续查询缓存,若仍没有查询到,则查询队列是否存在要查询的元素,若存在,循环查询,等待时间不超过1min,超过依然存在则报出异常,若不存在,查询数据库,返回客户端,若查询到直接返回客户端。整个流程相当于进行了读写分离:读操作在redis执行,写操作在数据库执行。如果写操作过于频繁,考虑mysql集群部署,其次如果redis失效,会造成雪崩,建议使用redis集群部署。
具体过程如图1所示,客户端进行读操作时在缓存中查询缓存,然后写入mysql数据库。
客户端进行写操作时,写入内存队列至缓存中,然后写入mysql数据库。其中写入内存队列时,查询结果,若查到结果则返回客户端,否则到缓存中查询数据,并异步修改缓存,最终写入mysql数据库并返回客户端,查询结果存在则刷新缓存,等待200ms查询结果,向内存队列中查询内存队列是否匹配有值,若有则删除缓存值,否则返回客户端。
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (9)
1.一种基于mysql高并发访问数据库的方法,其特征在于:该方法在mysql上增加redis缓存,在读和写时,先进行缓存处理,若缓存失效则访问数据库,其中使用多个redis节点,主从节点搭配使用。
2.根据权利要求1所述的基于mysql高并发访问数据库的方法,其特征在于:传入数据时增加多个内存队列,动态调整,达到负载均衡。
3.根据权利要求2所述的基于mysql高并发访问数据库的方法,其特征在于:使用hash算法,对传入数据id值进行hash取余,选择特定的队列。
4.根据权利要求3所述的基于mysql高并发访问数据库的方法,其特征在于:进行写操作时,直接写入内存队列。
5.根据权利要求4所述的基于mysql高并发访问数据库的方法,其特征在于:进行读操作时,访问缓存。
6.根据权利要求5所述的基于mysql高并发访问数据库的方法,其特征在于:缓存循环从队列中取出读取命令,若为写命令,先删除缓存,写入数据库,写完数据库后同步redis,删除队列中的更新命令。
7.根据权利要求6所述的基于mysql高并发访问数据库的方法,其特征在于:读操作查询缓存时,若查询到缓存,直接返回客户端,若没查询到缓存,则刷新200ms继续查询缓存。
8.根据权利要求7所述的基于mysql高并发访问数据库的方法,其特征在于:继续查询缓存时,仍查询不到,则查询队列中是否存在要查询的原始,若存在,循环查询,等待时间不超过1min,超过依然存在报出异常,若不存在,查询数据,返回客户端,若查询到直接返回客户端。
9.根据权利要求8所述的基于mysql高并发访问数据库的方法,其特征在于:读操作在redis执行,写操作在数据库执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011292200.0A CN112364061A (zh) | 2020-11-18 | 2020-11-18 | 一种基于mysql高并发访问数据库的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011292200.0A CN112364061A (zh) | 2020-11-18 | 2020-11-18 | 一种基于mysql高并发访问数据库的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112364061A true CN112364061A (zh) | 2021-02-12 |
Family
ID=74532503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011292200.0A Pending CN112364061A (zh) | 2020-11-18 | 2020-11-18 | 一种基于mysql高并发访问数据库的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112364061A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113127521A (zh) * | 2021-05-19 | 2021-07-16 | 福建天晴在线互动科技有限公司 | 一种分布式系统下的全量缓存方案及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103246696A (zh) * | 2013-03-21 | 2013-08-14 | 宁波公众信息产业有限公司 | 高并发数据库的访问方法及应用于多服务器系统的方法 |
CN103955486A (zh) * | 2014-04-14 | 2014-07-30 | 五八同城信息技术有限公司 | 分布式服务系统及其数据更新、数据查询的方法 |
CN110427386A (zh) * | 2019-08-05 | 2019-11-08 | 广州华多网络科技有限公司 | 数据处理方法、装置及计算机存储介质 |
CN111078426A (zh) * | 2019-12-03 | 2020-04-28 | 紫光云(南京)数字技术有限公司 | 一种后端微服务架构下的高并发解决方法 |
-
2020
- 2020-11-18 CN CN202011292200.0A patent/CN112364061A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103246696A (zh) * | 2013-03-21 | 2013-08-14 | 宁波公众信息产业有限公司 | 高并发数据库的访问方法及应用于多服务器系统的方法 |
CN103955486A (zh) * | 2014-04-14 | 2014-07-30 | 五八同城信息技术有限公司 | 分布式服务系统及其数据更新、数据查询的方法 |
CN110427386A (zh) * | 2019-08-05 | 2019-11-08 | 广州华多网络科技有限公司 | 数据处理方法、装置及计算机存储介质 |
CN111078426A (zh) * | 2019-12-03 | 2020-04-28 | 紫光云(南京)数字技术有限公司 | 一种后端微服务架构下的高并发解决方法 |
Non-Patent Citations (1)
Title |
---|
杨秋鸿等: "面向大数据应用的分布式服务平台设计与实现", 《东莞理工学院学报》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113127521A (zh) * | 2021-05-19 | 2021-07-16 | 福建天晴在线互动科技有限公司 | 一种分布式系统下的全量缓存方案及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
JP5321682B2 (ja) | ストレージシステムとストレージアクセス方法とプログラム | |
Pokorny | NoSQL databases: a step to database scalability in web environment | |
EP2735978B1 (en) | Storage system and management method used for metadata of cluster file system | |
US8589361B2 (en) | Reduced disk space standby | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
US20160203135A1 (en) | In-memory latch-free index structure | |
US20120290595A1 (en) | Super-records | |
WO2013174305A1 (zh) | 基于SSD的Key-Value型本地存储方法及系统 | |
CN103020315A (zh) | 一种基于主从分布式文件系统的海量小文件存储方法 | |
CN105117415A (zh) | 一种优化的ssd数据更新方法 | |
CN103595797B (zh) | 一种分布式存储系统中的缓存方法 | |
CN107888687B (zh) | 一种基于分布式存储系统的代理客户端存储加速方法及系统 | |
CN101221538A (zh) | 实现对缓存中数据快速查找的系统和方法 | |
CN103577470A (zh) | 一种提升web服务器性能的文件系统及方法 | |
CN103942301B (zh) | 一种面向多数据类型访问应用的分布式文件系统 | |
CN103365987B (zh) | 一种基于共享磁盘架构的集群数据库系统及数据处理方法 | |
CN113836162A (zh) | 一种业务解耦并实现多级缓存的自动化更新的方法及装置 | |
CN106909323B (zh) | 适用于dram/pram混合主存架构的页缓存方法及混合主存架构系统 | |
CN104158863A (zh) | 基于事务级别全程高速缓冲的云存储机制 | |
CN112732725B (zh) | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 | |
CN112364061A (zh) | 一种基于mysql高并发访问数据库的方法 | |
CN107273443B (zh) | 一种基于大数据模型元数据的混合索引方法 | |
CN110659305B (zh) | 基于非易失存储系统的高性能关系型数据库服务系统 | |
CN108664217A (zh) | 一种降低固态盘存储系统写性能抖动的缓存方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210212 |