数据查找方法与装置的制造方法

xiaoxiao2021-2-28  207

数据查找方法与装置的制造方法
【技术领域】
[0001]本发明涉及一种计算机技术及互联网领域,特别涉及一种数据查找方法与装置。
【背景技术】
[0002]相关技术中,为了提高网站访问速度,一些大型的、需要频繁访问数据库的网站通常采用分布式的高速缓存系统。
[0003]相关技术中,分布式的高速缓存系统的工作流程为:先检查客户端的请求数据是否在内存缓存中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在内存缓存中,则到数据库中查找请求的数据,在数据库中查找到请求的数据后,从数据库中获取该数据,并将从数据库中获取的数据返回给客户端,同时将数据缓存一份到内存中;每次更新数据库的同时更新内存缓存中的数据,保证一致性。
[0004]根据上述工作流程中可知,在相关技术中,当请求的数据不在内存时,转而到数据库中查找,假设当前查找到数据是热门数据,同时有多个并发请求,则处理该多个请求的进程同时都将到数据库查找请求的数据,如果并发请求过多,例如,对于当前的热门消息,可能同时有上万甚至上十万、百万的获取请求,这将导致数据库的访问压力过大,进而导致拥塞。

【发明内容】

[0005]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据存储方案。
[0006]根据本发明的一个方面,本发明提供了一种数据查找方法包括:接收数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据;在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据对应的令牌;在获取到所述令牌的情况下,访问所述对应数据库以查找所请求的数据。
[0007]可选地,还包括:在获取到所述令牌后,锁定所述令牌,以使所述令牌无法再被获取。
[0008]可选地,还包括:从所述对应数据库获取所请求的数据,将所请求的数据返回给请求方并将所请求的数据存储在所述对应数据库的缓存中。
[0009]可选地,在将所请求的数据存储在所述对应数据库的缓存中之后,所述方法还包括:释放所述令牌,使所述令牌能够再被获取。
[0010]可选地,还包括:在没有获取到所述令牌的情况下,等待预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据。
[0011]可选地,在等待所述预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据时,若仍未查找到所请求的数据,所述方法还包括:步骤1,判断等待的次数是否达到预设阈值或者等待的总时长是否超过预设阈值,如果是,则执行步骤4,否则,执行步骤2;步骤2,设置新的预定时长t2 =前次预定时长tl+At,其中,At为有理数;步骤3,等待新的预定时长t2后,再次从所述对应数据库的缓存中查找所请求的数据,如果查找到所述所请求的数据,则返回给所述数据的请求方,如果仍未查找到,则返回执行步骤1;步骤4,向所述数据的请求方返回未查询到所请求的数据的信息。
[0012]可选地,在等待所述预定时长后,再次从所述对应数据库的缓存中查找所请求的数据时,若查找到所请求的数据,所述方法还包括:将查找到的所请求的数据返回给所述数据的请求方。
[0013]根据本发明的另一个方面,提供了一种数据查找装置,包括:接收模块,用于接收数据获取请求;第一查找模块,用于从对应数据库的缓存中查找所述数据获取请求所请求的数据;第一获取模块,用于在所述第一查找模块从所述对应数据库的缓存中没有查找到所述数据获取请求所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据的令牌;第二查找模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,访问所述对应数据库以查找所述所请求的数据。
[0014]可选地,还包括:执行模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,锁定所述令牌,使所述令牌不会再被获取;
[0015]可选地,还包括:缓存模块,用于将所述第二查找模块查找到的数据缓存到所述对应数据库的缓存中;发送模块,用于将所述第二查找模块查找到的数据返回给所述数据的请求方。
[0016]可选地,还包括:释放模块,用于在所述缓存模块将查找到的数据缓存到所述对应数据库的缓存中之后,释放所述令牌,使所述令牌能够被获取。
[0017]可选地,还包括:休眠模块,用于在所述第一获取模块没有从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,等待预定时长,并在预定时长到达时触发所述第一查找模块;判断模块,用于在所述第一查找模块在所述休眠模块触发下没有从所述对应数据库的缓存中查找所请求的数据的情况下,判断所述休眠模块当前休眠的次数是否达到预设阈值或者所述休眠模块休眠的总时长是否超过预设阈值,如果是,则触发发送模块向所述数据的请求方返回未查询到所请求的数据的指示,如果否,则置新的预定时长t2 =前次预定时长tl+ △ t,再触发所述休眠模块,其中,Δ t为有理数。
[0018]本发明的数据查找方案,在接收到数据获取请求时,如果请求的数据没有存储在对应数据库的缓存中,则试图从对应数据库的缓存中获取请求的数据的令牌,只有在获取到该数据的令牌的情况下,才访问对应数据库以查找所请求的数据,从而可以通过控制缓存中存储的数据的令牌的数量,避免并发情况下所有进程都去数据库中查找数据而导致数据库的访问压力过大的问题,进而可以提高数据的查找效率。
[0019]根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
【附图说明】
[0020]后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。在附图中:
[0021 ]图1是根据本发明实施例一的数据查找方法的流程示意图;
[0022]图2是根据本发明实施例二的数据查找方法的流程示意图;
[0023]图3是根据本发明实施例三的数据查找装置的结构示意图;以及
[0024]图4是根据本发明实施例三的可选数据查找装置的结构示意图。
【具体实施方式】
[0025]下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0026]实施例一
[0027]图1是根据本发明实施例一的数据查找方法的流程示意图,如图1所示,本实施例提供的数据查找方法主要包括以下步骤:
[0028]步骤S102,接收到数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据;
[0029]在本实施例中,为了提高数据库的访问速度,将数据库中部分数据备份在缓存中,在接收到查询请求时,首先从对应数据库的缓存中查找请求的数据,如果从对应数据库的缓存中查找到请求的数据,则将查找到的数据返回给数据的请求方,如果在对应数据库的缓存中没有查找到所请求的数据,则执行步骤S104。
[0030]步骤S104,在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据对应的令牌;
[0031]在相关技术中,如果在对应数据库的缓存中没有查找到所请求的数据,则从对应数据库中查找,如果并发请求较多,会造成数据库的访问压力过大,因此,在本实施例中,在对应数据库的缓存中存储了数据库中各个数据对应的令牌,在没有从对应数据库的缓存中查找到所请求的数据的情况下,从对应数据库的缓存中获取所请求的数据的令牌。
[0032]在本发明实施例的一个可选实施方案中,可以在对应数据库的缓存中存储各个数据的关键字与令牌的对应关系,根据所请求的数据的关键字,可以获取到对应的令牌。
[0033]在本实施例中,一个令牌只能同时被一个进程获取 ,在一个进程获取到该令牌之后,该令牌即被锁定,其余进程不能再获取该令牌,除非该令牌被释放。
[0034]在本发明实施例的一个可选实施方案中,每个数据可以对应一个令牌,也可以对应多个令牌,具体可以根据数据库的读写速度以及并发的处理速度等来设置每个数据对应的令牌。
[0035]步骤S106,在获取到所述令牌的情况下,访问所述对应数据库以查找所请求的数据。
[0036]在本实施例提供的数据查找方法中,在接收到数据获取请求时,如果请求的数据没有存储在对应数据库的缓存中,则试图从对应数据库的缓存中获取请求的数据的令牌,只有在获取到该数据的令牌的情况下,才访问对应数据库以查找所请求的数据,从而可以通过控制缓存中存储的数据的令牌的数量,避免并发情况下所有进程都去数据库中查找数据而导致数据库的访问压力过大的问题,进而可以提高数据的查找效率
[0037]在本发明实施例的一个可选实施方案中,如果步骤S104中没有获取到所述令牌,则等待预定时长,在预定时长到达时,从所述对应数据库的缓存中查找所请求的数据。
[0038]在本实施例中,没有获取到令牌的情况下,说明已经有进程获取到该令牌了,该令牌已经被锁定了。本实施例中,为了避免并发请求过多,对于没有获取令牌的进程,不允许该进程去访问数据库,而是等待一定时间后,再使该进程继续到对应数据库的缓存中查找所请求的数据。在具体应用中,可以使没有拿到令牌的进程进入休眠(sleep)状态,休眠预定时间后,例如,3ms,醒来,再去对应数据库的缓存中查找所请求的数据。
[0039]在本实施例中,如果没有获取到令牌的进程在休眠一定时间后醒来,从对应数据库的缓存中查找所请求的数据,如果查找到所请求的数据,则将查找到的数据返回给数据的请求方。
[0040]在本发明实施例的一个可选实施方案中,如果没有获取到令牌的进程在休眠一定时间后醒来,从对应数据库的缓存中没有查找所请求的数据,则该进程可以继续进入休眠状态,直到醒来从对应数据库的缓存中查找所请求的数据,或者是休眠的次数达到阈值,或者是休眠的总时间达到阈值。因此,在该可选实施方式中,在等待预定时长后,从对应数据库的缓存中没有查找到所请求的数据的情况下,本实施例提供的方法还可以包括以下步骤:
[0041]步骤1,判断等待的次数是否达到预设阈值或者等待的总时长是否超过预设阈值,如果是,则执行步骤4,否则,执行步骤2;
[0042]步骤2,置新的预定时长t2=上一次的预定时长tl+At,其中,At为有理数;
[0043]步骤3,等待预定时长t2后,从对应数据库的缓存中查找所请求的数据,如果查找到所述所请求的数据,则返回给所述数据的请求方,如果没有查找到,则返回步骤1;
[0044]步骤4,向所述数据的请求方返回未查询到所请求的数据的指示。
[0045]在本实施例中,At可以大于等于0,即本实施例中,进程休眠的时间可以递增,SP如果休眠一个短时间后,对应数据库的缓存中还是没有请求的数据,则可以再休眠一个稍长的时间再查找。例如,第一次可以休眠0.3毫秒,第二次可以休眠0.5毫秒。或者,Δ t也可以小于等于0,即进程休眠的时间可以递减,即如果休眠一个稍长时间后,对应数据库的缓存中还是没有请求的数据,则可以再休眠一个稍短的时间再查找。例如,第一次可以休眠
0.5毫秒,第二次可以休眠0.3毫秒。在具体应用中,At怎么取值,数据库中可以根据一个进程大概需要多长时间才能从数据库中取得数据,并将数据写入到对应数据库的缓存确定。
[0046]在本发明实施例的一个可选实施方案中,如果在步骤S104中,进程从对应数据库的缓存中获取到了所请求的数据的令牌,则为了防止别的进程使用该令牌,先锁定该令牌,使该令牌不会被其它进程获取,从而可以控制访问数据库的进程。
[0047]在本发明实施例的一个可选实施方案中,如果在步骤S106中从对应数据库获取所请求的数据,则可以将查找到的数据返回给数据的请求方,并将查找到的数据缓存到数据库的缓存中。通过该可选实施方式,可以使得一个进程从数据库中获取的数据可以共享给其它进程,避免了所有并发请求都到数据库中查找而导致数据库访问压力过大的问题。
[0048]在上述可选实施方式中,由于对应数据库的缓存中存储的数据都有一个有效期,在该有效期到达之后,将会删除对应数据库的缓存中缓存的该数据,因此,为了避免在这种情况下需要到数据库中查找该数据而该数据的令牌没有被释放,从而无法获取到该数据的令牌,进而无法从数据库中查找该数据的问题,在本发明实施例的一个可选实施方案中,在将查找到的数据缓存到对应数据库的缓存中之后,本实施例提供的方法还可以包括:释放该令牌,使该令牌能够被获取。
[0049]通过本实施例提供的技术方案,执行数据获取请求的进程在从对应数据库的缓存中没查找到所请求的数据的情况下,并不是直接到数据库中查找该数据,而是从对应数据库的缓存中获取该数据对应的令牌,在获取到该数据的令牌的情况下,才去数据库中查找该数据,在查找到该数据之后,将该数据缓存至对应数据库的缓存中。而没有获取到该数据的令牌的进程则等待一段时间后,再尝试从对应数据库的缓存中获取所请求的数据,如果其它进程已从数据库中查找到该数据,并缓存至对应数据库的缓存中,则可以从对应数据库的缓存中获取到所请求的数据。采用这种方式,可以避免并发的多个请求同时访问数据库而导致数据库访问压力过大的问题,可以提供数据查找的效率。
[0050]实施例二
[0051]图2为根据本实施例的数据缓存方法的流程示意图,如图2所示,本实施例提供的数据缓存方法主要包括以下步骤:
[0052]步骤S201,接收数据获取请求;
[0053]步骤S202,从对应数据库的缓存中查找数据获取请求所请求的数据;
[0054]步骤S203,是否从对应数据库的缓存中查找到所请求的数据?如果是,则执行步骤S214,否则,执行步骤S204;
[0055]步骤S204,从对应数据库的缓存中获取所请求的数据的令牌;
[0056]步骤S205,是否获取到令牌?如果是,则执行步骤S206,否则,执行步骤S208 ;
[0057]步骤S206,从数据库中查找所请求的数据,将查找到的数据返回给数据的请求方;
[0058]步骤S207,将查找到的数据缓存至对应数据库的缓存;
[0059]步骤S208,等待预定时间;
[0060]步骤S209,从对应数据库的缓存中查找所请求的数据;
[0061]步骤S210,判断是否从对应数据库的缓存中查找到所请求的数据,如果是,则执行步骤S214,否则,执行步骤S211 ;
[0062]步骤S211,判断等待的次数是否达到阈值或等待的总时间达到阈值,如果是,则执行步骤S213,否则,执行步骤S212 ;
[0063]步骤S212,预定时间t = t+ Δ t,返回步骤S208,其中,Δ t为有理数;
[0064]步骤S213,向数据的请求方返回没有查找到所请求的数据的指示;
[0065]步骤S214,将查找到的数据返回给数据的请求方。
[0066]通过本实施例提供的技术方案,执行数据获取请求的进程在从对应数据库的缓存中没查找到所请求的数据的情况下,并不是直接到数据库中查找该数据,而是从对应数据库的缓存中获取该数据对应的令牌,在获取到该数据的令牌的情况下,才去数据库中查找该数据,在查找到该数据之后,将该数据缓存至对应数据库的缓存中。而没有获取到该数据的令牌的进程则等待一段时间后,再尝试从对应数据库的缓存中获取所请求的数据,如果其它进程已从数据库中查找到该数据,并缓存至对应数据库的缓存中,则可以从对应数据库的缓存中获取到所请求的数据。采用这种方式,可以避免并发的多个请求同时访问数据库而导致数据库访问压力过大的问题,可以提供数据查找的效率。
[0 067]实施例三
[0068]本实施例提供了一种数据查找装置,该装置可以用于实现上述任一种实施方式所描述的数据缓存方法。
[0069]图3为本实施例提供的数据查找装置的结构示意图,如图3所示,该数据缓存装置主要包括:接收模块310,用于接收数据获取请求;第一查找模块320,用于从对应数据库的缓存中查找数据获取请求所请求的数据;第一获取模块330,用于在第一查找模块320从对应数据库的缓存中没有查找到数据获取请求所请求的数据的情况下,从对应数据库的缓存中获取所请求的数据的令牌;第二查找模块340,用于在第一获取模块330从对应数据库的缓存中获取到所请求的数据的令牌的情况下,从数据库中查找所请求的数据。
[0070]通过本实施例提供的上述数据查找装置,接收模块310在接收到数据获取请求时,第一查找模块320从对应数据库的缓存中查找所请求的数据,在第一查找模块320在对应数据库的缓存中没有查找到所请求的数据的情况下,第一获取模块330试图从对应数据库的缓存中获取请求的数据的令牌,只有在第一获取模块330获取到该数据的令牌的情况下,第二查找模块340访问对应数据库以查找所请求的数据,从而可以通过控制缓存中存储的数据的令牌的数量,避免并发情况下所有进程都去数据库中查找数据而导致数据库的访问压力过大的问题,进而可以提高数据的查找效率。
[0071]在本发明实施例的一个可选实施方案中,如果没有获取到令牌的进程在休眠一定时间后醒来,从对应数据库的缓存中没有查找所请求的数据,则该进程可以继续进入休眠状态,直到醒来从对应数据库的缓存中查找所请求的数据,或者是休眠的次数达到阈值,或者是休眠的总时间达到阈值。因此,如图4所示,该装置还可以包括:休眠模块350,用于在第一获取模块330从对应数据库的缓存中没有获取到所请求的数据的令牌的情况下,等待预定时长,并在预定时长到达时触发第一查找模块320;判断模块360,用于在第一查找模块320在休眠模块350触发下没有从对应数据库的缓存中查找所请求的数据的情况下,判断休眠模块350当前休眠的次数是否达到预设阈值或者休眠模块350休眠的总时长是否超过预设阈值,如果是,则触发发送模块370向数据的请求方返回未查询到所请求的数据的指示,如果否,则置新的预定时长t2 =上次等待的预定时长tl+At,再触发休眠模块350,其中,Δt为有理数;发送模块370用于在所述判断模块360的触发下,向数据的请求方返回未查询到所请求的数据的指示。
[0072]在本实施例中,At可以大于等于0,即本实施例中,进程休眠的时间可以递增,SP如果休眠一个短时间后,对应数据库的缓存中还是没有请求的数据,则可以再休眠一个稍长的时间再查找。例如,第一次可以休眠0.3毫秒,第二次可以休眠0.5毫秒。或者,Δ t也可以小于等于0,即进程休眠的时间可以递减,即如果休眠一个稍长时间后,对应数据库的缓存中还是没有请求的数据,则可以再休眠一个稍短的时间再查找。例如,第一次可以休眠
0.5毫秒,第二次可以休眠0.3毫秒。在具体应用中,At怎么取值,数据库中可以根据一个进程大概需要多长时间才能从数据库中取得数据,并将数据写入到对应数据库的缓存确定。
[0073]在本发明实施例的一个可选实施方案中,发送模块370还用于在第一查找模块320从对应数据库的缓存中查找到所请求的数据的情况下,将查找到的数据返回给数据的请求方。
[0074]在本发明实施例的一个可选实施方案中,如果第一获取模块330从对应数据库的缓存中获取到了所请求的数据的令牌,则为了防止别的进程使用该令牌,先锁定该令牌,使该令牌不会被其它进程获取,因此,如图4所示,在该可选实施方式中,该装置还包括:执行模块380,用于在第一获取模块330从对应数据库的缓存中获取到所请求的数据的令牌的情况下,锁定令牌,使令牌不会再被获取。
[0075]在本发明实施例的一个可选实施方案中,在第二查找模块340从数据库中查找所请求的数据,将查找到的数据返回给数据的请求方,并将查找到的数据缓存到对应数据库的缓存中。因此,如图4所示,该装置还可以缓存模块390,用于将第二查找模块340查找到的数据缓存到对应数据库的缓存中;发送模块370,用于将第二查找模块340查找到的数据返回给数据的请求方。通过该可选实施方式,可以使得一个进程从数据库中获取的数据可以共享给其它进程,避免了所有并发请求都到数据库中查找而导致数据库访问压力过大的问题。
[0076]在上述可选实施方式中,由于对应数据库的缓存中缓存的数据都有一个有效期,在该有效期到达之后,将会删除对应数据库的缓存中缓存的该数据,因此,为了避免在这种情况下需要到数据库中查找该数据而该数据的令牌没有被释放,从而无法获取到该数据的令牌,进而无法从数据库中查找该数据的问题,在本发明实施例的一个可选实施方案中,该装置还可以包括:释放模块,用于在缓存模块390将查找到的数据缓存到对应数据库的缓存中之后,释放令牌,使令牌能够被获取。
[0077]通过本实施例提供的上述数据查找装置,在从对应数据库的缓存中没查找到所请求的数据的情况下,并不是直接到数据库中查找该数据,而是从对应数据库的缓存中获取该数据对应的令牌,在获取到该数据的令牌的情况下,才去数据库中查找该数据,在查找到该数据之后,将该数据缓存至对应数据库的缓存中。而没有获取到该数据的令牌的进程则等待一段时间后,再尝试从对应数据库的缓存中获取所请求的数据,如果其它进程已从数据库中查找到该数据,并缓存至对应数据库的缓存中,则可以从对应数据库的缓存中获取到所请求的数据。采用这种方式,可以避免并发的多个请求同时访问数据库而导致数据库访问压力过大的问题,可以提供数据查找的效率。
[0078]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0079]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0080]本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0081 ]此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
[0082]基于本发明的一个方面,还公开了:A1.—种数据查找方法,包括:
[0083]接收数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据;
[0084]在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓 存中获取所请求的数据对应的令牌;
[0085]在获取到所述令牌的情况下,访问所述对应数据库以查找所请求的数据。
[0086]A2.根据A1所述的方法,还包括:
[0087]在获取到所述令牌后,锁定所述令牌,以使所述令牌无法再被获取。
[0088]A3.根据A1或A2所述的方法,还包括:
[0089]从所述对应数据库获取所请求的数据,将所请求的数据返回给请求方并将所请求的数据存储在所述对应数据库的缓存中。
[0090]A4.根据A3所述的方法,其中,在将所请求的数据存储在所述对应数据库的缓存中之后,所述方法还包括:
[0091 ]释放所述令牌,使所述令牌能够再被获取。
[0092]A5.根据A1或A2所述的方法,还包括:
[0093]在没有获取到所述令牌的情况下,等待预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据。
[0094]A6.根据A5所述的方法,其中,在等待所述预定时长11后,再次从所述对应数据库的缓存中查找所请求的数据时,若仍未查找到所请求的数据,所述方法还包括:
[0095]步骤1,判断等待的次数是否达到预设阈值或者等待的总时长是否超过预设阈值,如果是,则执行步骤4,否则,执行步骤2;
[0096]步骤2,设置新的预定时长t2=前次预定时长tl+At,其中,At为有理数;
[0097]步骤3,等待新的预定时长t2后,再次从所述对应数据库的缓存中查找所请求的数据,如果查找到所述所请求的数据,则返回给所述数据的请求方,如果仍未查找到,则返回执行步骤1;
[0098]步骤4,向所述数据的请求方返回未查询到所请求的数据的信息。
[0099]A7.根据A5所述的方法,其中,在等待所述预定时长后,再次从所述对应数据库的缓存中查找所请求的数据时,若查找到所请求的数据,所述方法还包括:
[0100]将查找到的所请求的数据返回给所述数据的请求方。
[0101]基于本发明的另一个方面,还公开了: B8.一种数据查找装置,包括:
[0102]接收模块,用于接收数据获取请求;
[0103]第一查找模块,用于从对应数据库的缓存中查找所述数据获取请求所请求的数据;
[0104]第一获取模块,用于在所述第一查找模块从所述对应数据库的缓存中没有查找到所述数据获取请求所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据的令牌;
[0105]第二查找模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,访问所述对应数据库以查找所述所请求的数据。
[0106]B9.根据B8所述的装置,还包括:
[0107]执行模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,锁定所述令牌,使所述令牌不会再被获取。
[0108]B10.根据B8或B9所述的装置,还包括:
[0109]缓存模块,用于将所述第二查找模块查找到的数据缓存到所述对应数据库的缓存中;
[0110]发送模块,用于将所述第二查找模块查找到的数据返回给所述数据的请求方。
[0111]B11.根据B10所述的装置,还包括:
[0112]释放模块,用于在所述缓存模块将查找到的数据缓存到所述对应数据库的缓存中之后,释放所述令牌,使所述令牌能够被获取。
[0113]B12.根据B8或B9所述的装置,还包括:
[0114]休眠模块,用于在所述第一获取模块没有从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,等待预定时长,并在预定时长到达时触发所述第一查找模块;
[0115]判断模块,用于在所述第一查找模块在所述休眠模块触发下没有从所述对应数据库的缓存中查找所请求的数据的情况下,判断所述休眠模块当前休眠的次数是否达到预设阈值或者所述休眠模块休眠的总时长是否超过预设阈值,如果是,则触发发送模块向所述数据的请求方返回未查询到所请求的数据的指示,如果否,则置新的预定时长t2 =前次预定时长tl+ △ t,再触发所述休眠模块,其中,Δ t为有理数。
【主权项】
1.一种数据查找方法,包括: 接收数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据; 在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据对应的令牌; 在获取到所述令牌的情况下,访问所述对应数据库以查找所请求的数据。2.根据权利要求1所述的方法,还包括: 在获取到所述令牌后,锁定所述令牌,以使所述令牌无法再被获取。3.根据权利要求1或2所述的方法,还包括: 从所述对应数据库获取所请求的数据,将所请求的数据返回给请求方并将所请求的数据存储在所述对应数据库的缓存中。4.根据权利要求3所述的方法,其中,在将所请求的数据存储在所述对应数据库的缓存中之后,所述方法还包括: 释放所述令牌,使所述令牌能够再被获取。5.根据权利要求1或2所述的方法,还包括: 在没有获取到所述令牌的情况下,等待预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据。6.根据权利要求5所述的方法,其中,在等待所述预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据时,若仍未查找到所请求的数据,所述方法还包括: 步骤1,判断等待的次数是否达到预设阈值或者等待的总时长是否超过预设阈值,如果是,则执行步骤4,否则,执行步骤2; 步骤2,设置新的预定时长t2 =前次预定时长tl+At,其中,At为有理数; 步骤3,等待新的预定时长t2后,再次从所述对应数据库的缓存中查找所请求的数据,如果查找到所述所请求的数据,则返回给所述数据的请求方,如果仍未查找到,则返回执行步骤1; 步骤4,向所述数据的请求方返回未查询到所请求的数据的信息。7.根据权利要求5所述的方法,其中,在等待所述预定时长后,再次从所述对应数据库的缓存中查找所请求的数据时,若查找到所请求的数据,所述方法还包括: 将查找到的所请求的数据返回给所述数据的请求方。8.—种数据查找装置,包括: 接收模块,用于接收数据获取请求; 第一查找模块,用于从对应数据库的缓存中查找所述数据获取请求所请求的数据; 第一获取模块,用于在所述第一查找模块从所述对应数据库的缓存中没有查找到所述数据获取请求所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据的令牌; 第二查找模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,访问所述对应数据库以查找所述所请求的数据。9.根据权利要求8所述的装置,还包括: 执行模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,锁定所述令牌,使所述令牌不会再被获取。10.根据权利要求8或9所述的装置,还包括:缓存模块,用于将所述第二查找模块查找到的数据缓存到所述对应数据库的缓存中;发送模块,用于将所述第二查找模块查找到的数据返回给所述数据的请求方。
【专利摘要】本发明提供了一种数据查找方法与装置。其中数据查找方法包括:接收数据获取请求,从对应数据库的缓存中查找数据获取请求所请求的数据;在从对应数据库的缓存中没有查找到所请求的数据的情况下,从对应数据库的缓存中获取所请求的数据对应的令牌;在获取到所述令牌的情况下,访问对应数据库以查找所请求的数据。本发明的技术方案,可以解决由于并发请求太多而导致数据库访问压力过大的问题。
【IPC分类】G06F17/30
【公开号】CN105488208
【申请号】CN201510921166
【发明人】郭军, 梁敬彪, 曾志海
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
【公开日】2016年4月13日
【申请日】2015年12月11日

最新回复(0)