发明内容
本公开实施例至少提供一种搜索方法、装置、电子设备及存储介质。
第一方面,本公开实施例提供了一种搜索方法,包括:
响应于搜索请求,获取版本回退信息,所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种;
基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量;
基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。
本公开实施例中,在接收到搜索请求时,获取版本回退信息,并基于版本回退信息获取搜索结果,使得所获取的搜索结果具有时效性,能够提升用户的搜索体验。
根据第一方面,在一种可能的实施方式中,所述响应于搜索请求,获取版本回退信息,包括:
响应于所述搜索请求,获取干预请求信息并根据所述干预请求信息确定是否开启容灾缓存;
在确定开启容灾缓存的情况下,获取所述版本回退信息。
本公开实施例中,根据干预请求信息确定是否开启容灾缓存,可以在需要开启的情况下,获取版本回退信息,避免了不必要情况下的资源浪费。
根据第一方面,在一种可能的实施方式中,所述基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量,包括:
在所述版本回退信息包括开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并根据所述版本回退时间生成第二时间偏移量;
基于所述第一时间偏移量以及所述第二时间偏移量,生成目标时间偏移量。
本公开实施例中,在开启版本回退的情况下,根据版本归档间隔时间以及版本回退时间生成目标时间偏移量,可以使得所生成的目标时间偏移量符合需求。
根据第一方面,在一种可能的实施方式中,所述基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量,包括:
在所述版本回退信息包括不开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并基于当前时间信息生成第三时间偏移量;
基于所述第一时间偏移量以及所述第三时间偏移量,生成目标时间偏移量。
本公开实施例中,在不开启版本回退的情况下,基于当前时间以及版本归档间隔时间生成目标偏移量,可以保证目标时间偏移量的时效性。
根据第一方面,在一种可能的实施方式中,所述基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果,包括:
基于所述目标时间偏移量及所述搜索请求,生成第一目标缓存键;
基于所述第一目标缓存键,从所述缓存中确定与所述第一目标缓存键匹配的目标版本归档列表;
从所述目标版本归档列表中确定目标版本号,所述目标版本号的归档时间与所述目标时间偏移量之间的时间距离最近;
基于所述目标版本号及所述搜索请求,生成第二目标缓存键;
基于所述第二目标缓存键,得到所述搜索结果。
本公开实施例中,根据缓存键得到搜索内容,可以提升搜索内容的获取效率和精度。
根据第一方面,在一种可能的实施方式中,所述基于所述第二目标缓存键,得到所述搜索结果,包括:
基于所述第二目标缓存键,读取所述与所述第二目标缓存键对应的目标结果内容;
对所述目标结果内容进行反序列化,得到所述搜索结果。
根据第一方面,在一种可能的实施方式中,所述方法还包括:
在确定未开启容灾缓存的情况下,基于所述搜索请求,获取与所述搜索请求对应的搜索结果;
获取缓存配置信息,并基于所述缓存配置信息,对所述搜索结果进行缓存。
本公开实施例中,未开启容灾缓存的情况下,正常获取搜索结果,并对搜索结果进行缓存,以保证系统缓存信息的完整性。
根据第一方面,在一种可能的实施方式中,所述缓存配置信息包括所述版本归档间隔时间;所述基于所述缓存配置信息,对所述搜索结果进行缓存,包括:
对所述搜索结果进行封装及打包压缩,得到字符序列结果;
基于所述版本归档间隔时间及当前时间信息,确定归档版本号;
基于所述归档版本号以及所述搜索请求,分别生成第一缓存键以及第二缓存键;
基于所述第一缓存键缓存版本归档列表,并基于所述第二缓存键缓存所述字符序列结果。
本公开实施例中,依据缓存键对搜索内容进行缓存,对原先单一版本缓存系统的侵入性改造少,仅增加了一层版本归档的映射关系,原缓存key-val结构未做大的调整,不影响原先缓存命中率。
根据第一方面,在一种可能的实施方式中,所述基于所述版本归档间隔时间及当前时间信息,确定归档版本号,包括:
基于所述干预请求信息,确定是否需要写缓存;
在确定需要写缓存的情况下,基于所述版本归档间隔时间及当前时间信息,确定所述归档版本号。
本公开实施例中,先对干预请求信息进行解析,在确定需要写缓存的情况下,才进行写缓存的操作,可以避免资源的浪费。
第二方面,本公开实施例提供了一种搜索装置,包括:
获取模块,用于响应于搜索请求,获取版本回退信息,所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种;
生成模块,用于基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量;
查找模块,用于基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。
根据第二方面,在一种可能的实施方式中,所述获取模块具体用于:
响应于所述搜索请求,获取干预请求信息并根据所述干预请求信息确定是否开启容灾缓存;
在确定开启容灾缓存的情况下,获取所述版本回退信息。
根据第二方面,在一种可能的实施方式中,所述生成模块具体用于:
在所述版本回退信息包括开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并根据所述版本回退时间生成第二时间偏移量;
基于所述第一时间偏移量以及所述第二时间偏移量,生成目标时间偏移量。
根据第二方面,在一种可能的实施方式中,所述生成模块具体还用于:
在所述版本回退信息包括不开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并基于当前时间信息生成第三时间偏移量;
基于所述第一时间偏移量以及所述第三时间偏移量,生成目标时间偏移量。
根据第二方面,在一种可能的实施方式中,所述查找模块具体用于:
基于所述目标时间偏移量及所述搜索请求,生成第一目标缓存键;
基于所述第一目标缓存键,从所述缓存中确定与所述第一目标缓存键匹配的目标版本归档列表;
从所述目标版本归档列表中确定目标版本号,所述目标版本号的归档时间与所述目标时间偏移量之间的时间距离最近;
基于所述目标版本号及所述搜索请求,生成第二目标缓存键;
基于所述第二目标缓存键,得到所述搜索结果。
根据第二方面,在一种可能的实施方式中,所述查找模块具体用于:
基于所述第二目标缓存键,读取所述与所述第二目标缓存键对应的目标结果内容;
对所述目标结果内容进行反序列化,得到所述搜索结果。
根据第二方面,在一种可能的实施方式中,所述装置还包括缓存模块;所述获取模块还用于:
在确定未开启容灾缓存的情况下,基于所述搜索请求,获取与所述搜索请求对应的搜索结果;
所述缓存模块用于:
获取缓存配置信息,并基于所述缓存配置信息,对所述搜索结果进行缓存。
根据第二方面,在一种可能的实施方式中,所述缓存配置信息包括版本归档间隔时间;所述缓存模块具体用于:
对所述搜索结果进行封装及打包压缩,得到字符序列结果;
基于所述版本归档间隔时间及当前时间信息,确定归档版本号;
基于所述归档版本号以及所述搜索请求,分别生成第一缓存键以及第二缓存键;
基于所述第一缓存键缓存版本归档列表,并基于所述第二缓存键缓存所述字符序列结果。
根据第二方面,在一种可能的实施方式中,所述缓存模块具体用于:
基于所述干预请求信息,确定是否需要写缓存;
在确定需要写缓存的情况下,基于所述版本归档间隔时间及当前时间信息,确定所述归档版本号。
第三方面,本公开实施例提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如第一方面所述的搜索方法。
第四方面,本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如第一方面所述的搜索方法。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
在大规模的互联网应用,如大型的即时通讯、电子商务网站等应用中,很多业务的处理都需要服务器集群来操作。服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。
但是,长期运行的服务器,由于服务器运行比较久,出现宕机或者出问题的情况会越来越普遍。而且,运行久了之后硬件会有损坏,系统也有可能出现不稳定的情况。系统运行的不稳定不仅造成数据丢失,还无法及时为用户提供应用服务,造成用户的等待。
为了解决上述问题,通常会引入容灾备份技术,容灾备份技术是通过特定的容灾机制,建立两套或多套功能相同的互联网系统,互相之间可以进行健康状态监视和功能切换,当一处系统因异常停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作,最大限度地保障提供正常应用服务。
然而,经研究发现,在搜索引擎应用场景下,现有的容灾缓存的方案大都采用旧的历史数据做兜底,并未考虑缓存内容的时效性问题,严重影响用户的体验。
本公开提供了一种搜索方法,包括:响应于搜索请求,获取版本回退信息,所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种;基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量;基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。如此,根据版本回退信息获取搜索结果,使得所获取的搜索结果具有时效性,进而能够在保证应用服务的同时提升用户的搜索体验。
请参阅图1,为本公开实施例所提供的搜索方法的执行主体的示意图,该方法的执行主体为电子设备100,其中电子设备100可以包括终端和服务器。例如,该方法可应用于终端中,终端可以是图1中所示智能手机10、台式计算机20、笔记本电脑30等,还可以是图1中未示出的智能音箱、智能手表、平板电脑等,并不限定。该方法还可应用于服务器40,或者可应用于由终端和服务器40所组成的实施环境中。服务器40可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云存储、大数据和人工智能平台等基础云计算服务的云服务器。
此外,在一些可能的实现方式中,该搜索方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
需要说明的是,在一些实施方式中,服务器40可以通网络50分别与智能手机10、台式计算机20及笔记本电脑30进行通信。网络50可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
参见图2所示,为本公开实施例提供的搜索方法的流程图,该搜索方法包括以下S101~S103:
S101,响应于搜索请求,获取版本回退信息,所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种。
示例性地,搜索请求为应用服务上层发送的调用请求信息,其中,应用服务是指为实现应用程序(APP)功能的一系列服务模块,该一系列服务模块之间存在调用关系,是一条链路,例如,客户端模块A→网络模块B→前端模块C→服务端模块D。本实施方式中,是指服务端模块D接收到其上游前端模块C发来的目标请求(如HTTP请求)信息。
示例性地,可以从外部平台获取干预请求信息。该干预请求信息用于指示在容灾缓存的过程中是否需要版本回退,以及与版本回退的相关信息。具体地,在确定需要开启版本回退的情况下,版本回退信息包括版本归档间隔时间及版本回退时间;在确定不需要开启版本回退的情况下,版本回退信息则只需包括版本归档间隔时间即可。
其中,版本归档间隔时间是指相邻两个版本的时间间隔,该时间间隔可以是1小时,可以是8小时,也可以是3天,在此不做限定。版本回退时间是指需要回退的指定时间,该时间可以是当前时间之前的任意时间节点,具体可以根据实际需求而进行设定,在此不做限定。
需要说明的是,外部平台不同于前述的应用服务,是与APP调用链路无关的其他服务平台,该外部平台上主要实现了一些信息和参数的配置化。通过外部平台可以下发特定的干预请求信息(即干预项)给服务端模块D,服务端模块D接收到干预请求信息后,即可确定在容灾缓存的过程中,是否需要开启版本回退。
在一些实施方式中,可以对所述干预请求信息进行解析并提取相应的目标字段,由于目标字段用于标识是否开启对当前应用服务的容灾缓存,以及开启容灾缓存下的版本回退信息,因此,可以基于所述目标字段,确定版本回退信息。
另外,所述干预请求信息的优先级高于所述调用请求信息的优先级。也即,在同时接收到应用服务上层发送的调用请求信息和外部平台发送的干预请求信息的情况下,以外部平台发送的干预请求信息为准。
S102,基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量。
示例性地,在获取到版本归档间隔时间以及所述是否开启版本回退的信息后,即可生成目标时间偏移量。其中,目标时间偏移量用于指示查找的对应时间。
S103,基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。
示例性地,在确定目标时间偏移量之后,即可基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果,使得所获取的搜索结果具有时效性,进而能够在保证应用服务的同时提升用户的搜索体验。
参见图3所示,在一些公开实施例中,针对上述步骤S102,在基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量时,可以包括以下S1021~S1025:
S1021,判断是否需要开启版本回退;若是,则执行S1022;若否,则执行S1024。
S1022,基于版本归档间隔时间生成第一时间偏移量,并根据所述版本回退时间生成第二时间偏移量。
S1023,基于所述第一时间偏移量以及所述第二时间偏移量,生成目标时间偏移量。
示例性地,在开启版本回退的情况下,可以根据版本归档间隔时间,生成第一时间偏移量F1,并据所述版本回退时间(版本回退的指定时间)生成第二时间偏移量F2,然后基于该第一时间偏移量F1以及第二时间偏移量F2生成目标时间偏移量,再基于目标时间偏移量即可确定需要查找的具体缓存版本,进而可以获取与搜索请求对应的搜索结果。
S1024,基于版本归档间隔时间生成第一时间偏移量,并基于当前时间信息生成第三时间偏移量。
S1025,基于所述第一时间偏移量以及所述第三时间偏移量,生成目标时间偏移量。
在未开启版本回退的情况下,可以根据版本归档间隔时间,生成第一时间偏移量F1,并根据当前时间信息生成第三时间偏移量F3,然后基于该第一时间偏移量F1以及第三时间偏移量F3生成目标时间偏移量,再基于目标时间偏移量即可确定需要查找的具体缓存版本,进而可以获取与搜索请求对应的搜索结果。
在一些实施方式中,参见图4所示,针对上述S103,在基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果时,可以包括以下S1031~S1035:
S1031,基于所述目标时间偏移量及所述搜索请求,生成第一目标缓存键。
S1032,基于所述第一目标缓存键,从数据库中确定与所述第一目标缓存键匹配的目标版本归档列表。
S1033,从所述目标版本归档列表中确定目标版本号,所述目标版本号的归档时间与所述目标时间偏移量之间的时间距离最近。
S1034,基于所述目标版本号及所述搜索请求,生成所述第二目标缓存键。
S1035,基于所述第二目标缓存键,得到所述搜索结果。
示例性地,根据目标时间偏移量及搜索请求,生成版本归档列表的第一目标缓存键Ks2,依据键值型缓存的Key-Value的缓存键Ks2,先去数据库中查询是否存在相匹配的归档列表记录,若存在与所述第一目标缓存键Ks2匹配的目标版本归档列表,则从目标版本归档列表中的所有版本集中查询得到与该目标时间偏移量之间时间距离最近的一个目标版本号(比如V2);再根据得到的目标版本号V2,及搜索请求,拼接得到对于搜索结果的第二目标缓存键Kr2,基于该所述第二目标缓存键Kr2,即可得到所述搜索结果。
需要说明的是,在生成第一目标缓存键Ks2及第二目标缓存键Kr2时,可以根据调用请求信息中的必要参数来实现,例如,该必要参数可以包括应用的App ID、频道标识及搜索建议(query)等。
在一些实施方式中,参见图5所示,针对上述S1035,在基于所述第二目标缓存键,得到所述搜索结果时,可以包括以下S10351~S10352:
S10351,基于所述第二目标缓存键,读取所述与所述第二目标缓存键对应的目标结果内容。
S10352,对所述目标结果内容进行反序列化,得到所述搜索结果。
示例性地,依据键值型缓存的述第二目标缓存键Kr2,取数据库中对应的目标结果内容(结果值),然后对目标结果内容反序列化,即可得到最终的搜索结果,并返回给调用上游展示给用户。
请参阅图6,为公开实施例提供的另一种搜索方法,该搜索方法包括以下S601~S606:
S601,响应于所述搜索请求,获取干预请求信息并根据所述干预请求信息确定是否开启容灾缓存;若是,则执行步骤S602;若否,则执行步骤S605。
示例性地,在接收到搜索请求后,还可以对从外部平台获取的干预请求信息中的目标字段进行解析,以确定是否开启容灾缓存,如此可以避免在不必要的情况(如系统正常)下而开启容灾缓存,导致浪费资源的情况发生。
S602,获取所述版本回退信息;所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种。
该步骤与前述步骤S101类似,在此不再赘述。
S603,基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量。
该步骤与前述步骤S102类似,在此不再赘述。
S604,基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。
该步骤与前述步骤S103类似,在此不再赘述。
S605,基于所述搜索请求,获取与所述搜索请求对应的搜索结果。
可以理解,在未开启容灾缓存的情况下,可以直接基于所述干预请求信息,获取与所述干预请求信息对应的搜索结果,并将搜索结果返回给应用上层(客户端模块)进行展示即可。
S606,获取缓存配置信息,并基于所述缓存配置信息,对所述搜索结果进行缓存。
可以理解,为了对系统进行备份,实现容灾缓存机制,在获取搜索结果之后,还应获取缓存配置信息,以对搜索结果进行缓存。
下面结合图7对,步骤S606进行详细论述,在一些实施方式中,所述缓存配置信息包括版本归档间隔时间,针对步骤S606,在基于所述缓存配置信息,对所述搜索结果进行缓存时,可以包括以下S6061~S6063:
S6061,对所述搜索结果进行封装及打包压缩,得到字符序列结果。
S6062,基于所述版本归档间隔时间及当前时间信息,确定归档版本号。
S6063,基于所述归档版本号以及所述搜索请求,分别生成第一缓存键以及第二缓存键。
S6064,基于所述第一缓存键缓存版本归档列表,并基于所述第二缓存键缓存所述字符序列结果。
在本实施方式中,在未开启容灾缓存的情况下,则继续调用应用服务的下游,获取本次搜索请求对应的搜索结果(比如文档信息),并对对所述搜索结果进行封装及打包压缩,得到字符序列结果R;接着根据外部平台配置的版本归档间隔时间T及当前时间信息,得到应属于的归档版本号V1,然后根据版本号V1和来自应用服务上层的调用请求信息,分别拼接生成对归档列表的第一缓存键Ks1和对字符序列结果R的第二缓存键Kr1,最终分别用第一缓存键Ks1和第二缓存键Kr1及对应的内容值更新缓存。
可以理解,并不是所有的情况下,都需要对搜索结果进行缓存,比如在非线上环境(如测试环境或者调试环境)下,则无需对搜索结果进行缓存,以免浪费系统资源。因此,在一些实施方式中,参见图8所示,针对上述步骤S6062,在基于所述版本归档间隔时间及当前时间信息,确定归档版本号时,可以包括以下S60621~S60622:
S60621,基于所述干预请求信息,确定是否需要写缓存。
S60622,在确定需要写缓存的情况下,基于所述版本归档间隔时间及当前时间信息,确定所述归档版本号。
示例性地,可以从来自应用服务上层的调用请求信息中,解析得到本次上下文环境信息,比如若解析得出上下文环境信息为线上环境,则确定需要写缓存,而若解析得出上下文环境为非线上环境,则不需要写缓存;或者,还可以从外部平台的配置信息中解析对应策略,确定是否需要将字符序列结果R写入或更新至缓存中。如果不需要写入或更新缓存,则流程结束;否则,继续以下步骤。
综上,本公开各个实施例中所述的搜索方法,由于不依赖任何离线或旁路系统对分布式环境下数据不一致问题的校验,只需确定回退的时间版本即可快速回退至指定的版本,不仅保证了搜索内容的时效性,还节省了成本开销,此外,该搜索方法也不需要考虑数据库主备集群切换、全量结果merge等问题。
另外,相较于异步拉取数据库各分片数据做全量或增量备份的方式来达到缓存内容多版本的方案,本公开各个实施例中所述的搜索方法,不依赖任何底层数据库存储引擎的功能特性,无需支持增量备份,且对原先单一版本缓存系统的侵入性改造少,仅增加了一层版本归档的映射关系,原缓存key-val结构未做大的调整,不影响原先缓存命中率。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一技术构思,本公开实施例中还提供了与搜索方法对应的搜索装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述搜索方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图9所示,为本公开实施例提供的一种搜索装置900的示意图,所述装置包括:
获取模块901,用于响应于搜索请求,获取版本回退信息,所述版本回退信息包括版本归档间隔时间、是否开启版本回退以及版本回退时间中的至少一种;
生成模块902,用于基于所述版本归档间隔时间以及所述是否开启版本回退,生成目标时间偏移量;
查找模块903,用于基于所述目标时间偏移量以及所述搜索请求,在所述缓存中查找与所述搜索请求对应的搜索结果。
在一种可能的实施方式中,所述获取模块901具体用于:
响应于所述搜索请求,获取干预请求信息并根据所述干预请求信息确定是否开启容灾缓存;
在确定开启容灾缓存的情况下,获取所述版本回退信息。
在一种可能的实施方式中,所述生成模块902具体用于:
在所述版本回退信息包括开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并根据所述版本回退时间生成第二时间偏移量;
基于所述第一时间偏移量以及所述第二时间偏移量,生成目标时间偏移量。
在一种可能的实施方式中,所述生成模块902具体还用于:
在所述版本回退信息包括不开启版本回退的情况下,基于所述版本归档间隔时间生成第一时间偏移量,并基于当前时间信息生成第三时间偏移量;
基于所述第一时间偏移量以及所述第三时间偏移量,生成目标时间偏移量。
在一种可能的实施方式中,所述查找模块903具体用于:
基于所述目标时间偏移量及所述搜索请求,生成第一目标缓存键;
基于所述第一目标缓存键,从所述缓存中确定与所述第一目标缓存键匹配的目标版本归档列表;
从所述目标版本归档列表中确定目标版本号,所述目标版本号的归档时间与所述目标时间偏移量之间的时间距离最近;
基于所述目标版本号及所述搜索请求,生成第二目标缓存键;
基于所述第二目标缓存键,得到所述搜索结果。
在一种可能的实施方式中,所述查找模块903具体用于:
基于所述第二目标缓存键,读取所述与所述第二目标缓存键对应的目标结果内容;
对所述目标结果内容进行反序列化,得到所述搜索结果。
在一种可能的实施方式中,参见图10所示,所述装置还包括缓存模块904;所述获取模块901还用于:
在确定未开启容灾缓存的情况下,基于所述搜索请求,获取与所述搜索请求对应的搜索结果;
所述缓存模块904用于:
获取缓存配置信息,并基于所述缓存配置信息,对所述搜索结果进行缓存。
在一种可能的实施方式中,所述缓存配置信息包括版本归档间隔时间;所述缓存模块904具体用于:
对所述搜索结果进行封装及打包压缩,得到字符序列结果;
基于所述版本归档间隔时间及当前时间信息,确定归档版本号;
基于所述归档版本号以及所述搜索请求,分别生成第一缓存键以及第二缓存键;
基于所述第一缓存键缓存版本归档列表,并基于所述第二缓存键缓存所述字符序列结果。
在一种可能的实施方式中,所述缓存模块904具体用于:
基于所述干预请求信息,确定是否需要写缓存;
在确定需要写缓存的情况下,基于所述版本归档间隔时间及当前时间信息,确定所述归档版本号。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本公开实施例还提供了一种电子设备。参照图11所示,为本公开实施例提供的电子设备700的结构示意图,包括处理器701、存储器702、和总线703。其中,存储器702用于存储执行指令,包括内存7021和外部存储器7022;这里的内存7021也称内存储器,用于暂时存放处理器701中的运算数据,以及与硬盘等外部存储器7022交换的数据,处理器701通过内存7021与外部存储器7022进行数据交换。
本申请实施例中,存储器702具体用于存储执行本申请方案的应用程序代码,并由处理器701来控制执行。也即,当电子设备700运行时,处理器701与存储器702之间通过总线703通信,使得处理器701执行存储器702中存储的应用程序代码,进而执行前述任一实施例中所述的方法。
其中,存储器702可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器701可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备700的具体限定。在本申请另一些实施例中,电子设备700可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中的搜索方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中的搜索方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。