基于加锁限制的数据库访问方法、系统、终端及存储介质技术方案

技术编号:28978409 阅读:9 留言:0更新日期:2021-06-23 09:24
本发明专利技术提供基于加锁限制的数据库访问方法、系统、终端及存储介质,包括:包括:接收多线程访问请求;若所述多线程访问请求中的线程获取到锁,则对主缓存进行更新操作,以使主缓存数据与数据库数据一致,并同步更新备份缓存;若所述多线程访问请求中的线程未获取到锁,则读取所述备份缓存并执行降级策略,以获取非空值。通过主缓存和备份缓存的双轨机制,使得未能获取到锁的线程不再像现有技术中那样低效率的等待,而是通过备用缓存来获取次新结果值或者直接获取一个固定值。进一步地,还基于分段加锁机制优化了加锁粒度,防止加锁粒度太大而对所有的线程请求都进行加锁,影响访问效率;结合备份缓存技术,最大限度地提升了用户体验和数据一致性。

【技术实现步骤摘要】
基于加锁限制的数据库访问方法、系统、终端及存储介质
本专利技术涉及数据库
,尤其涉及基于加锁限制的数据库访问方法、系统、终端及存储介质。
技术介绍
缓存雪崩是指由于缓存失效导致数据未加载到内存中,或者缓存时间大面积失效,从而导致所有请求都会去查数据库,进而导致数据库、CPU和内存负载过高,甚至宕机。目前解决缓存雪崩的技术方案有如下几种:方案1)解决缓存大面积失效的问题,对应方案如下:避免缓存设置相近的有效期,为有效期增加随机值,统一规划有效期,失效时间均匀分布。方案2)解决对热点数据持续高并发的问题,对应方案如下:使用互斥锁,例如jvm锁机制,分布式锁机制等。方案3)解决有效期本身的缺陷,对应方案为:缓存永不过期,异步更新。然而上述这些方案虽有不阻塞线程及用户体验好且不会出现雪崩效应的优势,但缺点是不保证数据一致性,代码复杂度增大(每个value值都要维护异步更新代码),容易堆积垃圾数据。
技术实现思路
有鉴于现有技术的上述缺陷,本专利技术所要解决的技术问题是提供一种既不阻塞线程不导致雪崩效应且能确保数据一致性的数据库访问方案。为实现上述目的,本专利技术提供了一种基于加锁限制的数据库访问方法,包括:接收多线程访问请求;若所述多线程访问请求中的线程获取到锁,则对主缓存进行更新操作,以使主缓存数据与数据库数据一致,并同步更新备份缓存;若所述多线程访问请求中的线程未获取到锁,则读取所述备份缓存并执行降级策略,以获取非空值。在本专利技术的较佳实施方式中,所述方法还包括:将待访问数据分为多个数据段,并基于分段加锁机制为每个数据段配置单独的锁,供所述多线程访问请求访问对应的数据段。在本专利技术的另一较佳实施方式中,所述分段加锁机制包括ConcurrentHashMap分段加锁机制。在本专利技术的另一较佳实施方式中,所述降级策略包括所述请求中未获取到锁的线程从所述备份缓存中获取次新结果数值。在本专利技术的另一较佳实施方式中,所述降级策略包括请求中未获取到锁的线程获取一预设数值。为实现上述目的,本专利技术提供了一种基于加锁限制的数据库访问系统,包括请求接收模块,用于接收多线程访问请求;缓存更新模块,用于若所述多线程访问请求中的线程获取到锁,则对主缓存进行更新操作,以使主缓存数据与数据库数据一致,并同步更新备份缓存;若所述多线程访问请求中的线程未获取到锁,则读取所述备份缓存并执行降级策略,以获取非空值。在本专利技术的较佳实施方式中,所述系统还包括分段加锁模块,用于将待访问数据分为多个数据段,并基于分段加锁机制为每个数据段配置单独的锁,供所述多线程访问请求访问对应的数据段。在本专利技术的较佳实施方式中,所述降级策略包括所述请求中未获取到锁的线程从所述备份缓存中获取次新结果数值或者获取一预设数值。为实现上述目的,本专利技术提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的基于加锁限制的数据库访问方法。为实现上述目的,本专利技术提供了一种数据库访问终端,包括:处理器及存储器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行所述的基于加锁限制的数据库访问方法。综上所述,本专利技术提供的基于加锁限制的数据库访问方法、系统、终端及存储介质具有以下技术效果:本专利技术通过主缓存和备份缓存的双轨机制,使得未能获取到锁的线程不再像现有技术中那样低效率的等待,而是通过备用缓存来获取次新结果值或者直接获取一个固定值。进一步地,还基于分段加锁机制优化了加锁粒度,防止加锁粒度太大而对所有的线程请求都进行加锁,影响访问效率;结合备份缓存技术,最大限度地提升了用户体验和数据一致性。以下将结合附图对本专利技术的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本专利技术的目的、特征和效果。附图说明图1是本专利技术一实施例中基于加锁限制的数据库访问方法的流程示意图。图2是本专利技术一实施例中基于加锁限制的数据库访问系统的结构示意图。图3是本专利技术一实施例中数据库访问终端的结构示意图。具体实施方式以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。需要说明的是,在下述描述中,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。另外,以下实施例中所提供的图示仅以示意方式说明本专利技术的基本构想,遂图示中仅显示与本专利技术中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。为了阐释的目的而描述了本专利技术的一些示例性实施例,需要理解的是,本专利技术可通过附图中没有具体示出的其他方式来实现。为了解决缓存雪崩的技术问题,现有的技术方案多是限流,从限制数据库访问量的角度来解决雪崩问题,但有着明显缺点,例如线程阻塞导致用户体验不佳,加锁的粒度太大导致对所有请求都加锁等等。缓存雪崩是由于原有缓存过期失效,新缓存未到期间,所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃。遇到这种情况,一般并发量不是特别多的时候,使用较多的解决方案是加锁排队。然而,加锁排队只是为了减轻数据库的压力,并没有提高系统吞吐量。假设在高并发下,缓存重建期间key是锁着的,这时如果过来1000个请求那么999个都是阻塞的,同样会导致用户等待超时,这是个指标不治本的方案。为便于理解,下文对限制数据库访问量的技术方案做详细说明。上述现有技术是一种单线程操作方式,即当前线程进行加锁解锁时其它所有线程都要排队等候。在当前线程进行加锁后,从缓存中获取数据,并到数据库中查询,再将查询的结果放入缓存,之后再解锁,只有在当前线程解锁后才能轮到下一个线程继续进行加锁和解锁操作。这种现有技术虽能限制数据库访问量,但有着明显缺点:1)线程阻塞,严重影响了用户体验;2)加锁的粒度太大,对所有进入到这个方法的加锁请求,即所有的查询都会被一把锁锁住。有鉴于此,本专利技术对加锁限制数据库本文档来自技高网...

【技术保护点】
1.一种基于加锁限制的数据库访问方法,其特征在于,包括:/n接收多线程访问请求;/n若所述多线程访问请求中的线程获取到锁,则对主缓存进行更新操作,以使主缓存数据与数据库数据一致,并同步更新备份缓存;/n若所述多线程访问请求中的线程未获取到锁,则读取所述备份缓存并执行降级策略,以获取非空值。/n

【技术特征摘要】
1.一种基于加锁限制的数据库访问方法,其特征在于,包括:
接收多线程访问请求;
若所述多线程访问请求中的线程获取到锁,则对主缓存进行更新操作,以使主缓存数据与数据库数据一致,并同步更新备份缓存;
若所述多线程访问请求中的线程未获取到锁,则读取所述备份缓存并执行降级策略,以获取非空值。


2.如权利要求1所述的基于加锁限制的数据库访问方法,其特征在于,所述方法还包括:将待访问数据分为多个数据段,并基于分段加锁机制为每个数据段配置单独的锁,供所述多线程访问请求访问对应的数据段。


3.如权利要求2所述的基于加锁限制的数据库访问方法,其特征在于,所述分段加锁机制包括ConcurrentHashMap分段加锁机制。


4.如权利要求1所述的基于加锁限制的数据库访问方法,其特征在于,所述降级策略包括从所述备份缓存中获取次新结果数值。


5.如权利要求1所述的基于加锁限制的数据库访问方法,其特征在于,所述降级策略包括获取一预设数值。


6.一种基于加锁限制的数据库访问系统,其特征在于,包括:
请求接收模块,用于接收多线程访...

【专利技术属性】
技术研发人员:杨磊汤锦春
申请(专利权)人:上海钧正网络科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1