CN116028531A - 数据查询方法、装置、设备以及存储介质 - Google Patents
数据查询方法、装置、设备以及存储介质 Download PDFInfo
- Publication number
- CN116028531A CN116028531A CN202310079379.9A CN202310079379A CN116028531A CN 116028531 A CN116028531 A CN 116028531A CN 202310079379 A CN202310079379 A CN 202310079379A CN 116028531 A CN116028531 A CN 116028531A
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- target data
- distributed
- local cache
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本说明书公开了一种数据查询方法、装置、设备以及存储介质,通过本说明书实施例提供的技术方案,在获取到数据获取请求的情况下,现在本地缓存中基于数据获取请求携带的数据标识进行查询,确定本地缓存中是否存在目标数据。在该本地缓存中未命中该目标数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存中是否存在该目标数据。在该分布式缓存中存在该目标数据的情况下,将该目标数据发送给客户端。由于该本地缓存和该分布式缓存是通过缓存注解的方式配置的,也就实现缓存逻辑和业务逻辑解耦的前提下,充分利用了本地缓存和分布式缓存各自的特性,提高了数据查询的效率。
Description
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种数据查询方法、装置、设备以及存储介质。
背景技术
数据库是按照数据结构来组织、存储和管理数据的仓库,数据库可以接收查询请求返回与所述查询请求对应的数据。当查询请求过多或者过于频繁时,数据库的响应时间会变长,甚至会崩溃。
相关技术中,为了提高了数据的访问速度和程序性能,通常采用缓存机制将数据库中的数据预先加载到内存中,然后在访问该数据时都在内存中完成,从而减少了对数据库的访问。
但是,使用缓存访问数据时存在一些缺点,如在高并发场景下会出现缓存失效,造成瞬间数据库访问量增大甚至崩溃,大大降低了数据查询的效率。
发明内容
本说明书实施例提供了一种数据查询方法、装置、设备以及存储介质,可以在提升数据查询稳定性的前提下,提高数据查询的效率,技术方案如下:
一方面,提供了一种数据查询方法,所述方法包括:
获取客户端发送的数据获取请求,所述数据获取请求用于请求获取目标数据,所述数据获取请求携带所述目标数据的数据标识;
响应于所述数据获取请求,基于所述目标数据的数据标识在本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;
在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据,所述本地缓存和所述分布式缓存是通过缓存注解的方式配置的;
在所述分布式缓存中命中所述目标数据的情况下,将所述分布式缓存中的所述目标数据发送给所述客户端。
一方面,提供了一种数据查询装置,所述装置包括:
请求获取模块,用于获取客户端发送的数据获取请求,所述数据获取请求用于请求获取目标数据,所述数据获取请求携带所述目标数据的数据标识;
查询模块,用于响应于所述数据获取请求,基于所述目标数据的数据标识在本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;
所述查询模块,用于在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据,所述本地缓存和所述分布式缓存是通过缓存注解的方式配置的;
发送模块,用于在所述分布式缓存中命中所述目标数据的情况下,将所述分布式缓存中的所述目标数据发送给所述客户端。
在一种可能的实施方式中,所述发送模块,还用于在所述本地缓存中命中所述目标数据的情况下,将所述本地缓存中的所述目标数据发送给所述客户端。
在一种可能的实施方式中,所述发送模块,还用于将所述分布式缓存中的所述目标数据发送至所述本地缓存。
在一种可能的实施方式中,所述查询模块,还用于在所述分布式缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
所述发送模块,还用于将所述目标数据发送给所述客户端。
在一种可能的实施方式中,所述发送模块,还用于执行下述至少一项:
将所述目标数据发送至所述本地缓存;
将所述目标数据发送至所述分布式缓存。
在一种可能的实施方式中,所述装置还包括:
数据获取模块,用于从数据库中获取第一缓存数据和第二缓存数据,所述第一缓存数据和所述第二缓存数据的数据内容不同;
存储模块,用于将所述第一缓存数据存储在所述本地缓存中,将所述第二缓存数据存储在所述分布式缓存中。
在一种可能的实施方式中,所述装置还包括:
更新模块,用于每隔预设时长,更新所述本地缓存和分布式缓存中的缓存数据。
在一种可能的实施方式中,所述更新模块,用于每隔第一预设时长,更新所述本地缓存;每隔第二预设时长,更新所述分布式缓存,所述第一预设时长和所述第二预设时长不同。
在一种可能的实施方式中,所述装置还包括控制模块,用于执行下述至少一项:
获取第一缓存控制请求,所述第一缓存控制请求用于请求启用或停用所述本地缓存;响应于所述第一缓存控制请求,控制所述本地缓存启用或停用;
获取第二缓存控制请求,所述第二缓存控制请求用于请求启用或停用所述分布式缓存;响应于所述第二缓存控制请求,控制所述分布式缓存启用或停用。
在一种可能的实施方式中,所述查询模块还用于在所述本地缓存启用,所述分布式缓存停用的情况下,响应于所述数据获取请求,基于所述目标数据的数据标识在所述本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
所述发送模块还用于将所述目标数据发送给所述客户端。
在一种可能的实施方式中,所述查询模块还用于在所述本地缓存停用,所述分布式缓存启用的情况下,响应于所述数据获取请求,基于所述目标数据的数据标识在所述分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据;在所述分布式缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
所述发送模块还用于将所述目标数据发送给所述客户端。
一方面,提供了一种计算机设备,所述计算机设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条计算机程序,所述计算机程序由所述一个或多个处理器加载并执行以实现所述数据查询方法。
一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现所述数据查询方法。
一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括程序代码,该程序代码存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该程序代码,处理器执行该程序代码,使得该计算机设备执行上述数据查询方法。
通过本说明书实施例提供的技术方案,在获取到数据获取请求的情况下,现在本地缓存中基于数据获取请求携带的数据标识进行查询,确定本地缓存中是否存在目标数据。在该本地缓存中未命中该目标数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存中是否存在该目标数据。在该分布式缓存中存在该目标数据的情况下,将该目标数据发送给客户端。由于该本地缓存和该分布式缓存是通过缓存注解的方式配置的,也就实现缓存逻辑和业务逻辑解耦的前提下,充分利用了本地缓存和分布式缓存各自的特性,提高了数据查询的效率。
附图说明
为了更清楚地说明本说明书实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书实施例提供的一种数据查询方法的实施环境的示意图;
图2是本说明书实施例提供的一种数据查询方法的流程图;
图3是本说明书实施例提供的另一种数据查询方法的流程图;
图4是本说明书实施例提供的又一种数据查询方法的流程图;
图5是本说明书实施例提供的一种数据查询装置的结构示意图;
图6是本说明书实施例提供的一种终端的结构示意图;
图7是本说明书实施例提供的一种服务器的结构示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合附图对本说明书实施方式做进一步的详细描述。
本说明书中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
数据库:数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。
缓存:将数据子集储存到一个具备高度可访问性的高速运行层的过程。
本地缓存:将数据子集缓存到系统本地,通常是临时存储在系统内存中,属于单机独享性质。
分布式缓存:将数据子集缓存到第三方缓存器中,属于集群共享性质。
注解:Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制,广泛应用于Springboot技术体系,主要可降低系统配置复杂度,提升可读性和研发效能。
图1是本说明书实施例提供的一种数据查询方法的实施环境示意图,参见图1,该实施环境中可以包括客户端110和服务器140。
客户端110通过无线网络或有线网络与服务器140相连。可选地,客户端110是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。客户端110安装和运行有支持数据查询的应用程序。
服务器140是独立的物理服务器,或者是多个物理服务器构成的服务器集群或者分布式系统,或者是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器140为客户端110上运行的应用程序提供后台服务,也即是提供数据查询的相关服务。服务器140对应维护有数据库,数据库中存储有查询数据的全集。
本领域技术人员可以知晓,上述客户端的数量可以更多或更少。比如上述客户端仅为一个,或者上述客户端为几十个或几百个,或者更多数量,此时上述实施环境中还包括其他客户端。本说明书实施例对客户端的数量和设备类型不加以限定。
在介绍完本说明书实施例的实施环境之后,下面将结合上述实施环境对本说明书实施例的应用场景进行说明,在下述说明过程中,客户端也即是上述实施环境中的客户端110,服务器也即是上述实施环境中的服务器140。
本说明书实施例提供的技术方案能够应用在客户端上运行的各类应用程序通过服务器进行数据查询的场景中,比如应用在支付类应用程序通过服务器查询支付数据的场景中,或者应用在在线购物类应用程序通过服务器查询购物数据的场景中,或者应用在导航类应用程序通过服务器查询导航数据的场景中。
以本说明书实施例提供的技术方案应用在支付类应用程序通过服务器查询支付数据的场景中为例,客户端上运行该支付类应用程序,在该支付类应用程序需要获取支付数据的情况下,客户端向服务器发送数据获取请求,该数据获取请求用于请求获取支付数据,该数据获取请求携带支付数据的数据标识。在一些实施例中,该支付数据包括支付场景配置数据、支付渠道配置数据以及支付报文格式配置数据等。采用本说明书实施例提供的技术方案之后,服务器获取该数据获取请求,基于该数据获取请求中的数据标识在本地缓存中进行查询,确定该本地缓存中是否存储有该支付数据。在该本地缓存中未存储有该支付数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存是否存储有该支付数据。在该分布式缓存中存储有该支付数据的情况下,将该分布式缓存中的支付数据发送给客户端。客户端接收该支付数据,该支付类应用程序使用该支付数据完成支付。
需要说明的是,上述是以本说明书实施例提供的技术方案应用在支付类应用程序中为例进行说明的,在上述其他类型的应用场景中,实现方式与上述描述属于同一发明构思,实现过程不再赘述。
另外,本说明书实施例提供的技术方案除了能够应用在上述几种应用场景下之外,还能够应用在其他数据查询的场景下,本说明书实施例对此不作限定。
在介绍完本说明书实施例的实施环境和应用场景之后,下面对本说明书实施例提供的技术方案进行介绍。
图2是本说明书实施例提供的一种数据查询方法的流程图,参见图2,以执行主体为服务器为例,方法包括下述步骤。
202、服务器获取客户端发送的数据获取请求,该数据获取请求用于请求获取目标数据,该数据获取请求携带该目标数据的数据标识。
其中,该数据获取请求用于请求获取目标数据,在不同的应用场景下,该目标数据具有不同的含义,比如,在支付场景下,该目标数据为支付数据;在在线购物场景下,该目标数据为购物数据;在导航场景下,该目标数据为导航数据。该目标数据的数据标识用于标记该目标数据,基于该数据标识能够确定该目标数据。
204、服务器基于该目标数据的数据标识在本地缓存中进行查询,确定该本地缓存是否存在该目标数据。
其中,本地缓存也即是服务器的内存,本地缓存的容量有限但是具有较快的数据查询速度。基于该目标数据的数据标识在本地缓存中进行查询也即是查询该本地缓存中是否存在该数据标识对应的数据。
206、在该本地缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在分布式缓存中进行查询,确定该分布式缓存是否存在该目标数据,该本地缓存和该分布式缓存均是通过缓存注解的方式配置的。
其中,在该本地缓存中未命中该目标数据也就表示该本地缓存中未存储该目标数据。分布式缓存是与服务器在硬件上相对独立的缓存,该分布式缓存用于存储数据库中的部分数据,以便于服务器进行快速调用。该分布式缓存为一种共享缓存,也即是该分布式缓存能够为多个服务器提供数据查询的服务。缓存注解也被称为缓存注释,缓存注解具有多种类型,不同类型的缓存注解对应于不同的缓存配置功能。使用缓存注解对缓存进行配置时无需了解缓存配置的底层代码,大大降低了缓存配置的难度,提高了缓存配置的效率。另外,使用缓存注解对缓存进行配置时也实现了缓存逻辑与业务逻辑的解耦,提高缓存和业务的灵活性。
208、在该分布式缓存中命中该目标数据的情况下,服务器将该分布式缓存中的该目标数据发送给该客户端。
通过本说明书实施例提供的技术方案,在获取到数据获取请求的情况下,现在本地缓存中基于数据获取请求携带的数据标识进行查询,确定本地缓存中是否存在目标数据。在该本地缓存中未命中该目标数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存中是否存在该目标数据。在该分布式缓存中存在该目标数据的情况下,将该目标数据发送给客户端。由于该本地缓存和该分布式缓存是通过缓存注解的方式配置的,也就实现缓存逻辑和业务逻辑解耦的前提下,充分利用了本地缓存和分布式缓存各自的特性,提高了数据查询的效率。
上述步骤202-208是对本说明书实施例提供的技术方案的简单说明,下面将结合一些例子,对本说明书实施例提供的技术方案进行更加清楚地说明。
图3是本说明书实施例提供的一种数据查询方法的流程图,参见图3,以执行主体为服务器为例,方法包括下述步骤。
302、服务器从数据库中获取第一缓存数据和第二缓存数据,该第一缓存数据和该第二缓存数据的数据内容不同。
其中,该数据库中存储有可供调用的全部数据,该第一缓存数据和该第二缓存数据均是该数据库中的部分数据,用于预发至本地缓存和分布式缓存中以供在数据查询过程中快速调用。该第一缓存数据和该第二缓存数据的数据内容不同也就表示服务器预发至该本地缓存和该分布式缓存中的数据内容不同。本地缓存也即是服务器的内存,本地缓存的容量有限但是具有较快的数据查询速度。分布式缓存是与服务器在硬件上相对独立的缓存,该分布式缓存用于存储数据库中的部分数据,以便于服务器进行快速调用。该分布式缓存为一种共享缓存,也即是该分布式缓存能够为多个服务器提供数据查询的服务。在本说明书实施例中,该本地缓存和该分布式缓存构成多级缓存系统,使用该多级缓存系统能够快速进行数据查询。
在一种可能的实施方式中,服务器基于数据查询概率,从该数据库中获取该第一缓存数据和该第二缓存数据,该第一缓存数据的数据查询概率大于该第二缓存数据的数据查询概率。
其中,该数据查询概率用于表示数据被查询的可能性,数据查询概率越高,表示数据被查询的可能性越高;数据查询概率越低,表示数据被查询的可能性越低。
在这种实施方式下,服务器能够基于数据查询概率来筛选缓存数据,后续能够根据不同类型缓存的特点来预发缓存数据,提高缓存数据的利用率。
举例来说,服务器基于该数据库中数据在目标时间段内的被查询次数,确定该数据库中数据的数据查询概率。服务器将数据查询概率大于或等于第一概率阈值的数据确定为该第一缓存数据,将数据查询概率大于或等于第二概率阈值且小于该第一概率阈值的数据确定为该第二缓存数据,该第一概率阈值大于该第二概率阈值。其中,该目标时间段、该第一概率阈值和该第二概率阈值由技术人员根据实际情况进行设置,本说明书实施例对此不作限定。
在一种可能的实施方式中,服务器基于数据类型,从该数据库中获取该第一缓存数据和该第二缓存数据,该第一缓存数据和该第二缓存数据属于不同的数据类型。
在这种实施方式下,服务器能够基于数据类型来筛选第一缓存数据和第二缓存数据,从而实现基于数据类型的缓存预发,提高缓存数据的利用率。
举例来说,服务器基于该数据库中数据的类型,在对该数据库中的数据进行聚类,得到该第一缓存数据和该第二缓存数据,其中,该第一缓存数据的数据类型为第一类型,该第二缓存数据的数据类型为第二类型,该第一类型和该第二类型由技术人员根据实际情况进行设置,本说明书实施例对此不作限定。
在一种可能的实施方式中,服务器基于客户端上运行的应用程序,从该数据库中获取该第一缓存数据和该第二缓存数据,该第一缓存数据和该第二缓存数据均为该应用程序数据调用频率符合数据调用频率条件的缓存数据。
其中,在不同应用场景下,该应用程序为不同类型的应用程序,在支付场景下,该应用程序为支付类应用程序,相应地,该第一缓存数据和该第二缓存数据均为支付数据,也即是与支付过程相关的数据;在在线购物场景下,该应用程序为在线购物类应用程序,相应地,该第一缓存数据和该第二缓存数据均为购物数据,也即是与在线购物过程相关的数据;在导航场景下,该应用程序为导航类应用程序,相应地,该第一缓存数据和该第二缓存数据均为导航数据,也即是与导航过程相关的数据。应用程序调用数据的频率用于表示应用程序调用数据的可能性,应用程序调用数据的频率越高,则表示应用程序调用该数据的可能性越高,则该数据可以认为是该应用程序的高频调用数据;应用程序调用数据的频率越低,则表示应用程序调用该数据的可能性越低,则该数据可以认为是该应用程序的低频调用数据。该频率条件适用于筛选该应用程序的高频调用数据的。
在这种实施方式下,服务器能够根据客户端上运行的应用程序来筛选该第一缓存数据和该第二缓存数据,结合应用程序进行筛选得到的缓存数据更加符合应用程序的数据需求,提高缓存数据的利用率。
举例来说,服务器确定该客户端上运行的应用程序对数据库中不同数据的数据调用频率。服务器将数据调用频率大于或等于第一频率阈值的数据确定为该第一缓存数据,将数据调用频率大于或等于第二频率阈值且小于该第一概率阈值的数据确定为该第二缓存数据,该第一频率阈值大于该第二概率阈值。其中,该第一频率阈值和该第二频率阈值由技术人员根据实际情况进行设置,本说明书实施例对此不作限定。
需要说明的是,服务器能够通过上述任一种方式获取该第一缓存数据和该第二缓存数据,本说明书实施例对此不作限定。
304、服务器将该第一缓存数据存储在该本地缓存中,将该第二缓存数据存储在该分布式缓存中,该本地缓存和该分布式缓存均是通过缓存注解的方式配置的。
其中,在进行数据查询的过程中,由于本地缓存具有较快的数据查询速度,那么该本地缓存的查询优先级高于该分布式缓存。缓存注解也被称为缓存注释,缓存注解具有多种类型,不同类型的缓存注解对应于不同的缓存配置功能。使用缓存注解对缓存进行配置时无需了解缓存配置的底层代码,大大降低了缓存配置的难度,提高了缓存配置的效率。另外,使用缓存注解对缓存进行配置时也实现了缓存逻辑与业务逻辑的解耦,提高缓存和业务的灵活性。在一些实施例中,服务器通过分布式缓存注解组件(Distributed Cacheable)来配置该本地缓存和该分布式缓存,通过使用该分布式缓存注解组件,能够将该本地缓存和该分布式缓存托管给该分布式缓存注册组件,实现灵活的缓存配置。在一些实施例中,该本地缓存为Spring Cache,该分布式缓存为Zcache,当然,在其他可能的实施方式中,该本地缓存和该分布式缓存也可以为其他架构的缓存,本申请实施例对此不作限定。
下面对一些缓存注解进行说明。
@Cacheable:@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果。需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的。
@CachePut:@CachePut可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
@CacheEvict:@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
@Caching:@Caching注解可以在一个方法或者类上同时指定多个Spring Cache相关的注解。其拥有三个属性:cacheable、put和evict,分别用于指定@Cacheable、@CachePut和@CacheEvict。对于一个数据变动,更新多个缓存的场景,可以通过@Caching来实现。
缓存注解是基于AOP方式生成的,能够让业务无侵入低成本接入缓存。
需要说明的是,上述仅仅给出了一些缓存注解的示例,在其他可能的实施方式中,还可以包括更多类型的缓存注解,本说明书实施例对此不作限定。
在该第一缓存数据的数据查询概率大于该第二缓存数据的数据查询概率的情况下,将该第一缓存数据存储在本地缓存,将该第二缓存数据存储在分布式缓存,使得数据查询概率高的缓存数据存储在查询优先级高的缓存中,提高数据查询效率。
另外,该本地缓存和该分布式缓存的存储空间是有限的,在该本地缓存无法完整存储该第一缓存数据的情况下,服务器将该第一缓存数据中的一部分存储在该本地缓存中,将该第一缓存数据中的另一部分和该第二缓存数据存储在该分布式缓存中,该第一缓存数据中的一部分是指该第一缓存数据中数据查询概率最高的部分。相应地,在该分布式缓存无法完整存储该第一缓存数据中的另一部分和该第二缓存数据的情况下,服务器优先丢弃该第二缓存数据中的内容。
在该第一缓存数据和该第二缓存数据属于不同的数据类型的情况下,将该第一缓存数据存储在本地缓存,将该第二缓存数据存储在分布式缓存,能够使得该本地缓存和该分布式缓存分别存储不同类型的缓存数据,提高数据查询的效率。
另外,该本地缓存和该分布式缓存的存储空间是有限的,在该本地缓存无法完整存储该第一缓存数据的情况下,服务器将该第一缓存数据中的一部分存储在该本地缓存中,将该第一缓存数据中的另一部分丢弃。在该分布式缓存无法完整存储该第二缓存数据的情况下,服务器将该第二缓存数据中的一部分存储在该本地缓存中,将该第二缓存数据中的另一部分丢弃。
在该第一缓存数据的数据调用频率大于该第二缓存数据的数据调用频率的情况下,将该第一缓存数据存储在本地缓存,将该第二缓存数据存储在分布式缓存,使得数据调用频率高的缓存数据存储在查询优先级高的缓存中,提高数据查询效率。
另外,该本地缓存和该分布式缓存的存储空间是有限的,在该本地缓存无法完整存储该第一缓存数据的情况下,服务器将该第一缓存数据中的一部分存储在该本地缓存中,将该第一缓存数据中的另一部分和该第二缓存数据存储在该分布式缓存中,该第一缓存数据中的一部分是指该第一缓存数据中数据调用频率最高的部分。相应地,在该分布式缓存无法完整存储该第一缓存数据中的另一部分和该第二缓存数据的情况下,服务器优先丢弃该第二缓存数据中的内容。
在一些实施例中,服务器将该第一缓存数据存储在该本地缓存,将该第二缓存数据存储在该分布式缓存的过程中,除了为第一缓存数据和该第二缓存数据生成键之外,还能够生成缓存域,从而保证键重合导致的数据失效。相应地,在数据查询过程中,服务器也能够基于缓存域和键来共同查找数据。分布式分寸中通过SPEL表达式配置缓存域和键的伪代码如下:
@DistributedCacheable(domain="cfPayChannelInst,key="#channelInstCode")
在一些实施例中,对于该本地缓存和该分布式缓存,服务器还能够执行下述至少一个步骤。
在一种可能的实施方式中,服务器每隔预设时长,更新该本地缓存和分布式缓存中的缓存数据。
在这种实施方式下,服务器每隔一段时间更新该本地缓存和该分布式缓存中的缓存数据,保证该本地缓存和该分布式缓存与该数据库的数据一致性。
举例来说,服务器每隔第一预设时长,更新该本地缓存。服务器每隔第二预设时长,更新该分布式缓存,该第一预设时长和该第二预设时长不同。或者服务器每隔第一预设时长,更新该本地缓存。服务器每隔第二预设时长,更新该分布式缓存,该第一预设时长和该第二预设时长相同。其中,该第一预设时长和该第二预设时长由技术人员根据实际情况进行设置,实现本地缓存和该分布式缓存独立刷新控制,本说明书实施例对此不作限定。
比如,服务器每隔该第一预设时长,从数据库中重新获取第一缓存数据,采用该第一缓存数据覆盖该本地缓存。服务器每隔该第二预设时长,从数据库中重新获取第二缓存数据,采用该第二缓存数据覆盖该分布式缓存。其中,服务器从数据库中获取该第一缓存数据和该第二缓存数据的方式参见上述步骤302的描述,在此不再赘述。
在一些实施例中,服务器为该本地缓存和该分布式缓存中的数据设置失效时间,该本地缓存和该分布式缓存中的数据在存在时间达到该失效时间的情况下自动失效,从而保证缓存和数据库的数据一致性。
在一些实施例中,服务器除了通过上述实施方式每隔预设时长更新该本地缓存和该分布式缓存中的数据之外,还可以在客户端启动应用程序的情况下自动更新该本地缓存和该分布式缓存中的数据。
在一种可能的实施方式中,服务器获取第一缓存控制请求,该第一缓存控制请求用于请求启用或停用该本地缓存。响应于该第一缓存控制请求,服务器控制该本地缓存启用或停用。
在这种实施方式下,服务器能够通过该第一缓存控制请求来控制该本地缓存启用或停用,面对紧急情况能够及时进行处理。
在一种可能的实施方式中,服务器获取第二缓存控制请求,该第二缓存控制请求用于请求启用或停用该分布式缓存。响应于该第二缓存控制请求,服务器控制该分布式缓存启用或停用。
在这种实施方式下,服务器能够通过该第二缓存控制请求来控制该分布式缓存启用或停用,面对紧急情况能够及时进行处理。
通过上述两种实施方式,实现对本地缓存和分布式缓存的独立控制,提高了缓存管理的灵活性。
通过上述步骤302和304,能够将不同内容的第一缓存数据和第二缓存数据分别存储在本地缓存和分布式缓存中,从而提高本地缓存和分布式缓存的利用率,提高数据查询的效率。
需要说明的是,上述步骤302和304是可选步骤,服务器既能够先执行上述步骤302和304,再执行后续步骤306,也能够直接执行下述步骤306,本说明书实施例对此不作限定。
306、服务器获取客户端发送的数据获取请求,该数据获取请求用于请求获取目标数据,该数据获取请求携带该目标数据的数据标识。
其中,该数据获取请求用于请求获取目标数据,在不同的应用场景下,该目标数据具有不同的含义,比如,在支付场景下,该目标数据为支付数据。在在线购物场景下,该目标数据为购物数据。在导航场景下,该目标数据为导航数据。该目标数据的数据标识用于标记该目标数据,基于该数据标识能够确定该目标数据。在一些实施例中,客户端与服务器通过中间件实现连接和通信,比如,该中间件为Spring Boot、MySQL、MongoDB以及RabbitMQ中的任一项。
在一种可能的实施方式中,在客户端上运行的应用程序需要获取该目标数据的情况下,该应用程序通过该客户端向该服务器发送数据获取请求,该数据获取请求携带该目标数据的数据标识。服务器获取该数据获取请求。
在一些实施例中,该数据标识为该目标数据的键(Key),目标数据也即是值(Value),相应地,本地缓存、分布式缓存以及数据库中以键值对的形式存储数据。在一些实施例中,该本地缓存和该分布式缓存中的键使用是SPEL(Spring Expression Language,Spring表达语言)表达式生成的。
在一些实施例中,服务器通过上述步骤304控制该本地缓存和该分布式缓存的开启和关闭。在上述步骤304之后,除了执行上述步骤306之外,还能够执行下述步骤。
在一种可能的实施方式中,在该本地缓存停用,该分布式缓存启用的情况下,响应于该数据获取请求,服务器基于该目标数据的数据标识在该分布式缓存中进行查询,确定该分布式缓存是否存在该目标数据。在该分布式缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在数据库中进行查询,得到该目标数据。服务器将该目标数据发送给该客户端。
在这种实施方式下,服务器能够在该本地缓存停用的情况下直接在该分布式缓存中查询该目标数据,避免该本地缓存停用导致的缓存查询错误,提高数据查询的效率。
举例来说,在该数据标识为键的情况下,响应于该数据获取请求,服务器基于该键在该分布式缓存中进行查询,确定该分布式缓存中是否存在该键对应的该目标数据。在该分布式缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在数据库中进行查询,得到该目标数据。服务器将该目标数据发送给该客户端。
308、响应于该数据获取请求,服务器基于该目标数据的数据标识在本地缓存中进行查询,确定该本地缓存是否存在该目标数据。
其中,基于该目标数据的数据标识在本地缓存中进行查询也即是查询该本地缓存中是否存在该数据标识对应的数据。
在一种可能的实施方式中,在该数据标识为键的情况下,响应于该数据获取请求,服务器基于该键在该本地缓存中进行查询,确定该本地缓存中是否存在该键对应的该目标数据。其中,服务器基于该键在该本地缓存中进行查询也即是在该本地缓存中查询是否存在该键对应的值,在该本地缓存中存在该键对应的值的情况下,也就表示该本地缓存中存在该目标数据;在该本地缓存中不存在该键对应的值的情况下,也就表示该本地缓存中不存在该目标数据。
在这种实施方式下,服务器能够通过键来查询数据,数据的查询效率较高。
在上述步骤304之后,除了执行上述步骤306和308之外,还能够执行下述步骤。
在一种可能的实施方式中,在该本地缓存启用,该分布式缓存停用的情况下,响应于该数据获取请求,服务器基于该目标数据的数据标识在该本地缓存中进行查询,确定该本地缓存是否存在该目标数据。在该本地缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在数据库中进行查询,得到该目标数据。服务器将该目标数据发送给该客户端。
在这种实施方式下,服务器能够在本地缓存中未命中该目标数据的情况下,直接在数据库中进行查询,避免该分布式缓存停用导致的缓存查询错误,提高数据查询的效率。
需要说明的是,在上述步骤308之后,服务器根据目标数据的查询情况确定执行下述步骤310还是312。
310、在该本地缓存中命中该目标数据的情况下,服务器将该本地缓存中的该目标数据发送给该客户端。
其中,在该本地缓存中命中该目标数据是指该本地缓存中存储有该目标数据,且服务器在该本地缓存中查询到了该目标数据。
312、在该本地缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在分布式缓存中进行查询,确定该分布式缓存是否存在该目标数据。
其中,在该本地缓存中未命中该目标数据也就表示该本地缓存中未存储该目标数据。
在一种可能的实施方式中,在该数据标识为键以及该本地缓存中未命中该目标数据的情况下,服务器基于该键在该分布式缓存中进行查询,确定该分布式缓存中是否存在该键对应的该目标数据。
在这种实施方式下,服务器能够通过键来查询数据,数据的查询效率较高。
需要说明的是,在上述步骤308之后,服务器根据目标数据的查询情况确定执行下述步骤314还是316。
314、在该分布式缓存中命中该目标数据的情况下,服务器将该分布式缓存中的该目标数据发送给该客户端。
其中,在该分布式缓存中命中该目标数据是指该分布式缓存中存储有该目标数据,且服务器在该分布式缓存中查询到了该目标数据。
可选地,在步骤314之后,服务器还能够执行下述步骤。
在一种可能的实施方式中,服务器将该分布式缓存中的该目标数据发送至该本地缓存。
在这种实施方式下,服务器能够将该分布式缓存中的目标数据发送至该本地缓存,由于该本地缓存的查询速度较快,那么将该目标数据存储在该本地缓存有助于提高后续对该目标数据的查询速度。
316、在该分布式缓存中未命中该目标数据的情况下,服务器基于该目标数据的数据标识在数据库中进行查询,得到该目标数据。
可选地,在步骤316之后,服务器还能够执行下述至少一个步骤。
在一种可能的实施方式中,服务器将该目标数据发送至该本地缓存。
在这种实施方式下,服务器从数据库中得到该目标数据之后,还能够将该目标数据发送至该本地缓存,提高后续对该目标数据的查询效率。
在一种可能的实施方式中,服务器将该目标数据发送至该分布式缓存。
在这种实施方式下,服务器从数据库中得到该目标数据之后,还能够将该目标数据发送至该分布式缓存,提高后续对该目标数据的查询效率。
318、服务器将该目标数据发送给该客户端。
下面将结合图4对本说明书实施例提供的技术方案进行说明。
参见图4,客户端向服务器发送对目标数据的数据获取请求,该数据获取请求携带数据标识。服务器基于该数据标识在本地缓存中进行查询,确定该本地缓存中是否存在目标数据。在该本地缓存中命中该目标数据的情况下,服务器向客户端发送该目标数据,客户端获取该目标数据。在本地缓存中未命中该目标数据的情况下,服务器基于该数据标识在分布式数据库中进行查询,确定该分布式数据库中是否存在该目标数据。在该分布式缓存中命中该目标数据的情况下,服务器向客户端发送该目标数据,客户端获取该目标数据。同时,服务器将该分布式缓存中的该目标数据存储在本地缓存中。在分布式缓存中未命中该目标数据的情况下,服务器基于该数据标识在数据库中进行查询,得到该目标数据,服务器向客户端发送该目标数据,客户端获取该目标数据。同时,服务器将该服务器中的该目标数据存储在本地缓存和分布式缓存中。
上述所有可选技术方案,可以采用任意结合形成本说明书的可选实施例,在此不再一一赘述。
通过本说明书实施例提供的技术方案,在获取到数据获取请求的情况下,现在本地缓存中基于数据获取请求携带的数据标识进行查询,确定本地缓存中是否存在目标数据。在该本地缓存中未命中该目标数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存中是否存在该目标数据。在该分布式缓存中存在该目标数据的情况下,将该目标数据发送给客户端。由于该本地缓存和该分布式缓存是通过缓存注解的方式配置的,也就实现缓存逻辑和业务逻辑解耦的前提下,充分利用了本地缓存和分布式缓存各自的特性,提高了数据查询的效率。
或者说,本说明书实施例提供的技术方案保留了本地缓存和分布式缓存所有优点,在提升缓存可用性同时,解决了缓存数据不一致、内存溢出等问题。基于缓存注解实现低成本接入,可做到对业务逻辑无侵入。支持多项应急管控能力,提升了缓存的稳定性和应急性。支持应用启动自动更新缓存的机制,避免人为低级错误;基于这个特性,可实现配置版本差异,预发和线上使用不同的配置。
图5是本说明书实施例提供的一种数据查询装置的结构示意图,参见图5,装置包括:请求获取模块501、查询模块502以及发送模块503。
请求获取模块501,用于获取客户端发送的数据获取请求,该数据获取请求用于请求获取目标数据,该数据获取请求携带该目标数据的数据标识;
查询模块502,用于响应于该数据获取请求,基于该目标数据的数据标识在本地缓存中进行查询,确定该本地缓存是否存在该目标数据;
该查询模块502,用于在该本地缓存中未命中该目标数据的情况下,基于该目标数据的数据标识在分布式缓存中进行查询,确定该分布式缓存是否存在该目标数据,该本地缓存和该分布式缓存是通过缓存注解的方式配置的;
发送模块503,用于在该分布式缓存中命中该目标数据的情况下,将该分布式缓存中的该目标数据发送给该客户端。
在一种可能的实施方式中,该发送模块503,还用于在该本地缓存中命中该目标数据的情况下,将该本地缓存中的该目标数据发送给该客户端。
在一种可能的实施方式中,该发送模块503,还用于将该分布式缓存中的该目标数据发送至该本地缓存。
在一种可能的实施方式中,该查询模块502,还用于在该分布式缓存中未命中该目标数据的情况下,基于该目标数据的数据标识在数据库中进行查询,得到该目标数据;
该发送模块503,还用于将该目标数据发送给该客户端。
在一种可能的实施方式中,该发送模块503,还用于执行下述至少一项:
将该目标数据发送至该本地缓存;
将该目标数据发送至该分布式缓存。
在一种可能的实施方式中,该装置还包括:
数据获取模块,用于从数据库中获取第一缓存数据和第二缓存数据,该第一缓存数据和该第二缓存数据的数据内容不同;
存储模块,用于将该第一缓存数据存储在该本地缓存中,将该第二缓存数据存储在该分布式缓存中。
在一种可能的实施方式中,该装置还包括:
更新模块,用于每隔预设时长,更新该本地缓存和分布式缓存中的缓存数据。
在一种可能的实施方式中,该更新模块,用于每隔第一预设时长,更新该本地缓存;每隔第二预设时长,更新该分布式缓存,该第一预设时长和该第二预设时长不同。
在一种可能的实施方式中,该装置还包括控制模块,用于执行下述至少一项:
获取第一缓存控制请求,该第一缓存控制请求用于请求启用或停用该本地缓存;响应于该第一缓存控制请求,控制该本地缓存启用或停用;
获取第二缓存控制请求,该第二缓存控制请求用于请求启用或停用该分布式缓存;响应于该第二缓存控制请求,控制该分布式缓存启用或停用。
在一种可能的实施方式中,该查询模块502还用于在该本地缓存启用,该分布式缓存停用的情况下,响应于该数据获取请求,基于该目标数据的数据标识在该本地缓存中进行查询,确定该本地缓存是否存在该目标数据;在该本地缓存中未命中该目标数据的情况下,基于该目标数据的数据标识在数据库中进行查询,得到该目标数据;
该发送模块503还用于将该目标数据发送给该客户端。
在一种可能的实施方式中,该查询模块502还用于在该本地缓存停用,该分布式缓存启用的情况下,响应于该数据获取请求,基于该目标数据的数据标识在该分布式缓存中进行查询,确定该分布式缓存是否存在该目标数据;在该分布式缓存中未命中该目标数据的情况下,基于该目标数据的数据标识在数据库中进行查询,得到该目标数据;
该发送模块503还用于将该目标数据发送给该客户端。
需要说明的是:上述实施例提供的数据查询装置在进行数据查询时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据查询装置与数据查询方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
通过本说明书实施例提供的技术方案,在获取到数据获取请求的情况下,现在本地缓存中基于数据获取请求携带的数据标识进行查询,确定本地缓存中是否存在目标数据。在该本地缓存中未命中该目标数据的情况下,基于该数据标识在分布式缓存中进行查询,确定该分布式缓存中是否存在该目标数据。在该分布式缓存中存在该目标数据的情况下,将该目标数据发送给客户端。由于该本地缓存和该分布式缓存是通过缓存注解的方式配置的,也就实现缓存逻辑和业务逻辑解耦的前提下,充分利用了本地缓存和分布式缓存各自的特性,提高了数据查询的效率。
本说明书实施例提供了一种计算机设备,用于执行上述方法,该计算机设备可以实现为终端或者服务器,下面先对终端的结构进行介绍:
图6是本说明书实施例提供的一种终端的结构示意图。该终端600可以是:智能手机、平板电脑、笔记本电脑或台式电脑。终端600还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端600包括有:一个或多个处理器601和一个或多个存储器602。
处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个计算机程序,该至少一个计算机程序用于被处理器601所执行以实现本说明书中方法实施例提供的数据查询方法。
在一些实施例中,终端600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、显示屏605、摄像头组件606、音频电路607和电源608中的至少一种。
外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。
显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。
摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。
音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。
电源608用于为终端600中的各个组件进行供电。电源608可以是交流电、直流电、一次性电池或可充电电池。
在一些实施例中,终端600还包括有一个或多个传感器609。该一个或多个传感器609包括但不限于:加速度传感器610、陀螺仪传感器611、压力传感器612、光学传感器613以及接近传感器614。
加速度传感器610可以检测以终端600建立的坐标系的三个坐标轴上的加速度大小。
陀螺仪传感器611可以终端600的机体方向及转动角度,陀螺仪传感器611可以与加速度传感器610协同采集用户对终端600的3D动作。
压力传感器612可以设置在终端600的侧边框和/或显示屏605的下层。当压力传感器612设置在终端600的侧边框时,可以检测用户对终端600的握持信号,由处理器601根据压力传感器612采集的握持信号进行左右手识别或快捷操作。当压力传感器612设置在显示屏605的下层时,由处理器601根据用户对显示屏605的压力操作,实现对UI界面上的可操作性控件进行控制。
光学传感器613用于采集环境光强度。在一个实施例中,处理器601可以根据光学传感器613采集的环境光强度,控制显示屏605的显示亮度。
接近传感器614用于采集用户与终端600的正面之间的距离。
本领域技术人员可以理解,图6中示出的结构并不构成对终端600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
上述计算机设备还可以实现为服务器,下面对服务器的结构进行介绍:
图7是本说明书实施例提供的一种服务器的结构示意图,该服务器700可因配置或性能不同而产生比较大的差异,可以包括一个或多个处理器(Central Processing Units,CPU)701和一个或多个的存储器702,其中,所述一个或多个存储器702中存储有至少一条计算机程序,所述至少一条计算机程序由所述一个或多个处理器701加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器700还可以具有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器700还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括计算机程序的存储器,上述计算机程序可由处理器执行以完成上述实施例中的数据查询方法。例如,该计算机可读存储介质可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括程序代码,该程序代码存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该程序代码,处理器执行该程序代码,使得该计算机设备执行上述数据查询方法。
在一些实施例中,本说明书实施例所涉及的计算机程序可被部署在一个计算机设备上执行,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行,分布在多个地点且通过通信网络互连的多个计算机设备可以组成区块链系统。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
上述仅为本说明书的可选实施例,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书的保护范围之内。
Claims (15)
1.一种数据查询方法,所述方法包括:
获取客户端发送的数据获取请求,所述数据获取请求用于请求获取目标数据,所述数据获取请求携带所述目标数据的数据标识;
响应于所述数据获取请求,基于所述目标数据的数据标识在本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;
在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据,所述本地缓存和所述分布式缓存是通过缓存注解的方式配置的;
在所述分布式缓存中命中所述目标数据的情况下,将所述分布式缓存中的所述目标数据发送给所述客户端。
2.根据权利要求1所述的方法,所述基于所述目标数据的数据标识在本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据之后,所述方法还包括:
在所述本地缓存中命中所述目标数据的情况下,将所述本地缓存中的所述目标数据发送给所述客户端。
3.根据权利要求1所述的方法,所述在所述分布式缓存中命中所述目标数据的情况下,将所述分布式缓存中的所述目标数据发送给所述客户端之后,所述方法还包括:
将所述分布式缓存中的所述目标数据发送至所述本地缓存。
4.根据权利要求1所述的方法,所述在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据之后,所述方法还包括:
在所述分布式缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
将所述目标数据发送给所述客户端。
5.根据权利要求4所述的方法,所述在所述分布式缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据之后,所述方法还包括下述至少一项:
将所述目标数据发送至所述本地缓存;
将所述目标数据发送至所述分布式缓存。
6.根据权利要求1所述的方法,所述获取客户端发送的数据获取请求之前,所述方法还包括:
从数据库中获取第一缓存数据和第二缓存数据,所述第一缓存数据和所述第二缓存数据的数据内容不同;
将所述第一缓存数据存储在所述本地缓存中,将所述第二缓存数据存储在所述分布式缓存中。
7.根据权利要求6所述的方法,所述将所述第一缓存数据存储在所述本地缓存中,将所述第二缓存数据存储在所述分布式缓存中之后,所述方法还包括:
每隔预设时长,更新所述本地缓存和分布式缓存中的缓存数据。
8.根据权利要求7所述的方法,所述每隔预设时长,更新所述本地缓存和分布式缓存中的缓存数据包括:
每隔第一预设时长,更新所述本地缓存;
每隔第二预设时长,更新所述分布式缓存,所述第一预设时长和所述第二预设时长不同。
9.根据权利要求1所述的方法,所述方法还包括下述至少一项:
获取第一缓存控制请求,所述第一缓存控制请求用于请求启用或停用所述本地缓存;响应于所述第一缓存控制请求,控制所述本地缓存启用或停用;
获取第二缓存控制请求,所述第二缓存控制请求用于请求启用或停用所述分布式缓存;响应于所述第二缓存控制请求,控制所述分布式缓存启用或停用。
10.根据权利要求9所述的方法,所述获取客户端发送的数据获取请求之后,所述方法还包括:
在所述本地缓存启用,所述分布式缓存停用的情况下,响应于所述数据获取请求,基于所述目标数据的数据标识在所述本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;
在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
将所述目标数据发送给所述客户端。
11.根据权利要求9所述的方法,所述获取客户端发送的数据获取请求之后,所述方法还包括:
在所述本地缓存停用,所述分布式缓存启用的情况下,响应于所述数据获取请求,基于所述目标数据的数据标识在所述分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据;
在所述分布式缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在数据库中进行查询,得到所述目标数据;
将所述目标数据发送给所述客户端。
12.一种数据查询装置,所述装置包括:
请求获取模块,用于获取客户端发送的数据获取请求,所述数据获取请求用于请求获取目标数据,所述数据获取请求携带所述目标数据的数据标识;
查询模块,用于响应于所述数据获取请求,基于所述目标数据的数据标识在本地缓存中进行查询,确定所述本地缓存是否存在所述目标数据;
所述查询模块,用于在所述本地缓存中未命中所述目标数据的情况下,基于所述目标数据的数据标识在分布式缓存中进行查询,确定所述分布式缓存是否存在所述目标数据,所述本地缓存和所述分布式缓存是通过缓存注解的方式配置的;
发送模块,用于在所述分布式缓存中命中所述目标数据的情况下,将所述分布式缓存中的所述目标数据发送给所述客户端。
13.一种计算机设备,所述计算机设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条计算机程序,所述计算机程序由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求11任一项所述的数据查询方法。
14.一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至权利要求11任一项所述的数据查询方法。
15.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至权利要求11任一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310079379.9A CN116028531A (zh) | 2023-01-19 | 2023-01-19 | 数据查询方法、装置、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310079379.9A CN116028531A (zh) | 2023-01-19 | 2023-01-19 | 数据查询方法、装置、设备以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116028531A true CN116028531A (zh) | 2023-04-28 |
Family
ID=86077677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310079379.9A Pending CN116028531A (zh) | 2023-01-19 | 2023-01-19 | 数据查询方法、装置、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116028531A (zh) |
-
2023
- 2023-01-19 CN CN202310079379.9A patent/CN116028531A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110232048B (zh) | 日志文件的获取方法、装置及存储介质 | |
KR102148948B1 (ko) | 전자 장치의 멀티 태스킹 방법 및 그 전자 장치 | |
CN110837378B (zh) | 软件开发工具包sdk功能的调用方法及装置 | |
CN111569435B (zh) | 排行榜生成方法、系统、服务器及存储介质 | |
CN113420051B (zh) | 一种数据查询方法、装置、电子设备和存储介质 | |
CN108605261B (zh) | 电子设备及其操作方法 | |
CN110515962B (zh) | 缓存数据的方法、装置、电子设备及存储介质 | |
CN114244595A (zh) | 权限信息的获取方法、装置、计算机设备及存储介质 | |
CN114064450A (zh) | 应用程序测试方法、装置、电子设备及存储介质 | |
CN114416723B (zh) | 一种数据的处理方法、装置、设备及存储介质 | |
CN111682983B (zh) | 界面显示方法、装置、终端及服务器 | |
CN113220366A (zh) | 子应用启动方法、装置、终端及服务器 | |
CN110995842A (zh) | 业务数据下载方法、装置、设备及存储介质 | |
CN116028531A (zh) | 数据查询方法、装置、设备以及存储介质 | |
CN112612540B (zh) | 数据模型配置方法、装置、电子设备及存储介质 | |
CN113392120A (zh) | 获取SQLite的执行信息的方法及装置 | |
CN116737405B (zh) | 一种快应用卡片的数据通信的方法及相关设备 | |
CN113051015A (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN113609368B (zh) | 游戏帐号的查询结果显示方法、装置、设备和存储介质 | |
CN116382809B (zh) | 应用程序启动方法和电子设备 | |
CN113220396B (zh) | 一种嵌入页面管理方法和装置、电子设备、存储介质 | |
CN113220718B (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN113766043B (zh) | 配置目标容器的方法、装置、计算机设备及存储介质 | |
CN115794298A (zh) | 请求处理系统 | |
CN117640160A (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 |