CN111367952B - 缓存数据的分页查询方法、系统及计算机可读存储介质 - Google Patents

缓存数据的分页查询方法、系统及计算机可读存储介质 Download PDF

Info

Publication number
CN111367952B
CN111367952B CN202010136438.8A CN202010136438A CN111367952B CN 111367952 B CN111367952 B CN 111367952B CN 202010136438 A CN202010136438 A CN 202010136438A CN 111367952 B CN111367952 B CN 111367952B
Authority
CN
China
Prior art keywords
cache
data
cache data
query
user
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.)
Active
Application number
CN202010136438.8A
Other languages
English (en)
Other versions
CN111367952A (zh
Inventor
何建滨
蔡苗
陈震宇
刘国华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Postal Savings Bank of China Ltd
Original Assignee
Postal Savings Bank of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Postal Savings Bank of China Ltd filed Critical Postal Savings Bank of China Ltd
Priority to CN202010136438.8A priority Critical patent/CN111367952B/zh
Publication of CN111367952A publication Critical patent/CN111367952A/zh
Application granted granted Critical
Publication of CN111367952B publication Critical patent/CN111367952B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开缓存数据的分页查询方法、系统及计算机可读存储介质,其中,该方法包括步骤:接收用户的查询请求;判断是否需要创建或刷新缓存数据;若需要,则启动创建或刷新缓存数据的子线程,同时在创建或刷新缓存数据过程中轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或者缓存完成时读取最大页码对应的缓存数据;若不需要,则从已有缓存数据中读取用户请求页面的缓存数据。缓存数据的分页查询系统采用上述缓存数据的分页查询方法,在缓存数据的同时实现了数据分页查询请求的快速响应,提升了用户体验。

Description

缓存数据的分页查询方法、系统及计算机可读存储介质
技术领域
本发明计算机技术领域,尤其涉及缓存数据的分页查询方法、系统及计算机可读存储介质。
背景技术
在前端数据查询中,有时查询的数据集较大,且时常请求频率较高。如果每次实时查询数据,或数据完全检索出来缓存后再响应用户查询,通常会导致数据请求响应很慢,特别是在此类数据查询后还有后续处理的情况下,会消耗大量的时间。
目前已有把作为查询结果的数据集缓存到内存中的技术,例如现有专利“一种利用缓存响应数据请求的方法和系统(CN108804447A)”,请参阅图1,该现有专利文件公开了使用缓存技术进行数据缓存,然后使用哈希函数根据查询条件表达式计算哈希值,同时把此哈希值和查询结果以键值对的形式存储在缓存中。但是当用户首次查询数据或缓存过期需要刷新缓存、并且数据集较大时,还是需要一定的时间才能完成响应,这样就会需要等候较长的时间,给用户带来不好的体验。
发明内容
本发明的目的在于提供缓存数据的分页查询方法、系统及计算机可读存储介质,解决了现有技术中较大数据量在首次查询或者需要刷新缓存数据时,要等数据集完全检索并缓存后再响应用户查询请求,导致查询响应时间较长的问题。
为了实现上述目的,本发明提供如下技术方案:
一种缓存数据的分页查询方法,包括步骤:
接收用户的查询请求,所述用户的查询请求包括原始查询sql和查询条件;
根据所述原始查询sql和所述查询条件判断是否需要创建或刷新缓存数据;
若需要,则启动创建或刷新缓存数据的子线程,同时在创建或刷新缓存数据过程中轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或者缓存完成时读取最大页码对应的缓存数据;若不需要,则从已有缓存数据中读取用户请求页面的缓存数据。
优选地,根据原始查询sql和查询条件判断是否需要创建或刷新缓存数据的方法包括:
将原始查询sql和查询条件组成的表达式使用SHA256算法转换得到唯一的缓存主键;
基于所述缓存主键判断是否已存在用户查询请求对应的缓存数据;
若不存在缓存数据,则输出创建缓存数据的指令;若已存在缓存数据,则进一步判断已有缓存数据是否需要强制刷新;
若需要强制刷新,则输出刷新缓存数据的指令;若不需要强制刷新,则进一步判断已有缓存数据是否已过期;
若已过期,则输出刷新缓存数据的指令;若未过期,则输出不刷新缓存数据的指令。
具体地,基于所述缓存主键检索缓存日志表以判断是否已存在用户查询请求对应的缓存数据;
根据缓存日志表中的强制刷新字段判断已有缓存数据是否需要强制刷新;
根据缓存日志表中的缓存完成时间戳字段和缓存过期时长字段判断已有缓存数据是否已过期。
较佳地,利用基于redis的分布式锁对所述缓存主键上锁,以实现启动创建或刷新缓存数据的子线程,其中,创建或刷新缓存数据的子线程执行动作的步骤包括:
以所述缓存主键、分隔符和当前缓存版本号字段作为key值,向缓存数据表插入查询结果集,同时向缓存进度表插入缓存进度信息,其中,缓存进度表中的key值与缓存数据表中的key值保持一致,创建缓存数据时,当前缓存版本号设为1,更新缓存数据时,当前缓存版本号字段为原版本号字段加1;
缓存数据表中每更新一批数据,同时更新缓存进度表中的缓存数据条数;
当缓存数据完成后,缓存进度表中的缓存完成字段置为1,同时将缓存数据的日志信息插入或更新到缓存日志信息表中,并将分布式锁解锁。
具体地,将缓存数据的日志信息插入到缓存日志信息表包括插入缓存主键、原始查询sql、原始查询条件、缓存版本号字段、缓存完成时间戳字段、缓存过期时长字段、缓存数据条数字段和强制刷新字段;
将缓存数据的日志信息更新到缓存日志信息表包括更新缓存版本号字段、缓存完成时间戳字段、缓存数据条数字段和强制刷新字段。
优选地,当前正在创建或刷新缓存数据时,基于redis的分布式锁对所述缓存主键上锁失败,从当前正在创建或刷新缓存数据过程中读取用户查询页码对应的缓存数据或最大页码对应的缓存数据。
进一步地,在创建或刷新缓存数据过程中,读取用户查询页码对应的缓存数据或最大页码对应的缓存数据的方法包括:
通过当前缓存版本的key值,轮询对应的缓存进度表中的缓存数据条数;
计算用户查询页码对应的缓存数据条数区间;
当已缓存数据条数满足所述缓存数据条数区间时,从所述key值对应的缓存数据表中读取所述缓存数据条数区间对应的缓存数据;
当已缓存数据条数不满足所述缓存数据条数区间时,判断是否缓存完成,若缓存没有完成,则继续轮询缓存进度表中的缓存数据条数直至已缓存数据条数满足所述缓存数据条数区间,若缓存已完成,则读取最大页码对应的缓存数据。
优选地,当不需要创建或刷新缓存数据时,从已有缓存数据中读取用户请求页面的缓存数据的方法包括:
利用缓存日志表中的缓存数据条数字段得到缓存数据的总条数和总页码数;
以所述缓存主键、分隔符和缓存版本号组成key值去匹配缓存数据表的key值,得到已存在的缓存数据;
根据用户的查询请求页码读取相应页面的缓存数据。
一种缓存数据的分页查询系统,包括请求接收模块、判断模块以及数据读取模块,其中,
所述请求接收模块用于接收用户的查询请求,所述用户的查询请求包括原始查询sql和查询条件;
所述判断模块用于根据原始查询sql和所述查询条件判断是否需要创建或刷新缓存数据;
所述数据读取模块,用于在需要创建或刷新缓存数据时,启动创建或刷新缓存数据的子线程,同时轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或缓存完成时读取最大页码对应的缓存数据;
或者用于在不需要创建或刷新缓存数据时,则从已有缓存数据中读取用户请求页面的缓存数据。
一种计算机可读存储介质,其具有存储在其上的计算机可读程序指令,所述计算机可读程序指令用于执行上述缓存数据的分页查询方法。
与现有技术相比,本发明提供的缓存数据的分页查询方法、系统及计算机可读存储介质具有以下有益效果:
本发明提供的缓存数据的分页查询方法中,接收到用户的查询请求后,若需要创建或刷新缓存数据,则启动创建或刷新缓存数据的子线程,同时在创建或刷新缓存数据过程中轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或者缓存完成时读取最大页码对应的缓存数据;使得用户在第一次查询缓存数据或者需要刷新缓存数据时,能够在缓存数据结果集的同时,及时读取用户查询请求页码对应的缓存数据以返回给用户,大大提升了用户查询的响应速度,尤其是在查询的数据结果集较大时改善了用户的使用体验。
本发明提供的缓存数据的分页查询系统,采用上述缓存数据的分页查询方法,在缓存数据的同时实现了数据分页查询请求的快速响应,提升了用户体验。
本发明提供的计算机可读存储介质,存储有用于执行上述缓存数据的分页查询方法的计算机可读程序指令,在缓存数据的同时实现了数据分页查询请求的快速响应,提升了用户体验。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为现有技术中利用缓存响应数据请求的方法示意图;
图2为本发明实施例中缓存数据的分页查询方法的总体流程示意图;
图3为本发明实施例中缓存数据的分页查询方法的流程示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。
实施例一
请参阅图1或图2,本发明实施例提供一种缓存数据的分页查询方法,包括步骤:
接收用户的查询请求,其中,用户的查询请求包括原始查询sql和查询条件;
根据原始查询sql和查询条件判断是否需要创建或刷新缓存数据;
若需要,则启动创建或刷新缓存数据的子线程,同时在创建或刷新缓存数据过程中轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或者缓存完成时读取最大页码对应的缓存数据;若不需要,则从已有缓存数据中读取用户请求页面的缓存数据。
使得用户在第一次查询缓存数据或者需要刷新缓存数据时,能够在缓存数据结果集的同时,及时读取用户查询请求页码对应的缓存数据以返回给用户,大大提升了用户查询的响应速度,尤其是在查询的数据结果集较大时改善了用户的使用体验。
请参阅图2,本发明实施例提供的一种缓存数据的分页查询方法中,根据原始查询sql和查询条件判断是否需要创建或刷新缓存数据的方法包括:
将原始查询sql和查询条件组成的表达式使用SHA256算法转换得到唯一的缓存主键;
基于所述缓存主键查询缓存日志表以判断是否已存在用户查询请求对应的缓存数据;
若不存在缓存数据,则输出创建缓存数据的指令;若已存在缓存数据,则进一步判断已有缓存数据是否需要强制刷新;
若需要强制刷新,则输出刷新缓存数据的指令;若不需要强制刷新,则进一步判断已有缓存数据是否已过期;
若已过期,则输出刷新缓存数据的指令;若未过期,则输出不刷新缓存数据的指令。值得注意的是,本领域技术人员应当知晓,缓存日志表cache_log数据库通常为关系型数据库,例如mysql数据库。以下为缓存日志表的数据结构:
表一 缓存日志表的数据结构
缓存日志表字段说明如下:
缓存日志主键:缓存日志表中的主键字段,设置自增长属性。
缓存主键:为了保证每一条数据查询sql和对应的查询条件组成的表达式对应的缓存日志记录的唯一,且字段字符长度可控,此字段使用SHA256哈希算法进行处理,得到字符长度为256的唯一值。用于后续构成缓存进度表和缓存数据表key值的一部分。
原始查询sql:此字段记录查询数据的原始sql语句,可以查询此条缓存日志的查询sql。
原始查询条件:此字段记录查询数据的原始查询条件,可以查询此条缓存日志的原始查询条件。
缓存版本号:此字段记录同样的查询sql和查询条件下目前的版本号,在触发过期更新或强制更新时,缓存版本号+1,初始时为1。
更新时间戳:此字段记录创建完成缓存数据或更新完成缓存数据的时间戳。
缓存过期时长(秒):此字段记录此条日志对应的缓存数据过期时长,结合更新时间戳,判断同样的数据查询在本次查询时是否需要更新缓存数据。根据实际需要设置缓存过期时长的大小或设置默认时长。
缓存数据总条数:此字段记录数据查询缓存的数据总条数。
是否强制更新:此字段标志本次查询是否强制刷新缓存。在缓存没有过期,需要强制刷新缓存的情况下,强制刷新缓存标志为true。
因此,本发明实施例提供的一种缓存数据的分页查询方法中,判断是否需要创建或刷新缓存数据时,基于缓存主键检索缓存日志表即可判断是否已存在用户查询请求对应的缓存数据,根据缓存日志表中的强制刷新字段判断已有缓存数据是否需要强制刷新,根据缓存日志表中的缓存完成时间戳字段和缓存过期时字段判断已有缓存数据是否已过期。
在具体实施中,用户进行数据查询时,首先检索关系型数据库(如mysql)中的缓存日志表,以原始查询sql和查询条件组成的表达式使用SHA256算法转换后的值匹配缓存日志表cache_log中的cache_id字段,判断是否存有缓存日志(即是否存在用户所查询的缓存数据)。
当不存在缓存日志时,使用分布式锁对查询sql和对应的查询条件经SHA256算法转换得到的缓存主键,上锁,本领域技术人员应该理解的是该转换得到的缓存主键即为后续生成缓存数据后插入到缓存日志表中的缓存主键cache_id,可以使用基于redis的方式实现分布式锁,即启动创建缓存数据子线程。
当存在缓存日志时,先根据缓存日志表cache_log中的force_refresh字段判断是否需要强制刷新缓存数据,再根据cache_log中的缓存完成时间戳cache_update_time和缓存过期时长cache_timeout_second两个字段判断缓存数据是否过期,是否需要启动刷新缓存数据动作。
进一步地,当缓存日志表cache_log中force_refresh字段为false,不需要强制刷新缓存,且通过cache_update_time和cache_timeout_second判断缓存没有过期,不需要刷新缓存时,从已有缓存数据中读取用户请求页面的缓存数据的方法包括:
根据缓存日志表cache_log中的缓存数据总条数data_count字段计算得到返回缓存数据总条数和总页码数;并以缓存日志表cache_log中缓存主键cache_id、分隔符和缓存版本号组成key值,去匹配缓存数据库中缓存数据cache_data表中的key值,得到已存在的缓存数据;再根据用户的查询请求页码读取相应页面的缓存数据,查询结束。
当缓存日志表cache_log中force_refresh字段为true,需要强制刷新缓存时;或者force_refresh字段为false,不需要强制刷新缓存,但通过cache_update_time和cache_timeout_second判断缓存过期,需要更新缓存数据时,则使用分布式锁对缓存日志表中的缓存主键cache_id上锁,以启动刷新缓存数据子线程。
当接收到用户的请求时,先进行是否需要创建或刷新缓存数据的判断,可以避免已有缓存已经是最新的情况下依然去刷新缓存,造成不必要的内存资源浪费和较长的响应时间。在判断是否需要创建或刷新缓存数据的过程中也是根据优先级依次判断,尽可能的减少判断时长,以提高响应用户查询的速度。
此外,除以上所述的关系型数据库中存储的缓存日志表cache_log的数据结构之外,缓存的数据结构还包括缓存数据库里的缓存进度表cache_progress的数据结构,以及缓存数据表cache_data的数据结构。
其中,缓存进度表cache_progress存储在缓存数据库中,例如redis数据库。cache_progress的数据结构包括:
Key值:由原始查询sql和查询条件组成的表达式使用SHA256算法转换得到的缓存主键,即缓存日志表中的缓存主键、常见且不与缓存主键字符相同的分隔符(例如‘-’),以及缓存版本号三部分构成。
cache_progress_Value:用于存放实时的缓存数据条数和是否缓存完成标志。可以使用json格式,且格式规范如下所示:
data_count:缓存数据条数;
cache_finish:是否缓存完成标志(0未完成,1完成)。
缓存数据表cache_data也存储在缓存数据库中,例如redis数据库,其数据结构与缓存进度表cache_progress一样,采用Key-Value的形式:
Key值:由原始查询sql和查询条件组成的表达式使用SHA256算法转换得到的缓存主键,即缓存日志表中的缓存主键、常见且不与缓存主键字符相同的分隔符(例如‘-’),以及缓存版本号三部分构成,与缓存进度表的key值一致。
cache_data_Value:用于存储缓存数据结果集,采用list格式存储json字符串的形式。因不同的数据查询对应的结果集不一样,同时结果字段个数及字段含义也不一样,所以value中单条数据包含的键值对可以采用如下方式表示:
field1:value1;
field2:value2;
field3:value3;
...
fieldn:valuen。
请参阅图3,本发明实施例提供的一种缓存数据的分页查询方法中,当缓存数据需要刷新或者因不存在缓存日志需要创建缓存数据或者时,使用分布式锁对原始查询sql和查询条件组成的表达式使用SHA256算法转换得到的缓存主键上锁,以实现启动创建或刷新缓存数据的子线程,其中,可以使用基于redis的方式实现分布式锁。
创建或刷新缓存数据的子线程具体执行动作的步骤包括:
以上述缓存主键、分隔符和当前缓存版本号字段作为key值,向缓存数据表插入查询结果集,同时向缓存进度表插入缓存进度信息,其中,缓存进度表中的key值与缓存数据表中的key值保持一致,创建缓存数据时,当前缓存版本号设为1,更新缓存数据时,当前缓存版本号字段为原版本号字段加1;
缓存数据表中每更新一批数据,同时更新缓存进度表中的缓存数据条数;
当缓存数据完成后,缓存进度表中的缓存完成字段置为1,同时将缓存数据插入或更新到缓存日志信息表中,并将分布式锁解锁。
在具体实施过程中,分布式锁上锁可能成功或失败,分布式锁上锁可成功,即为启动创建或刷新缓存数据的子线程,分布式锁上锁不成功,说明此时正在创建或刷新缓存数据。
其中,如果分布式锁上锁成功,则以缓存主键+分隔符+当前缓存版本号(创建缓存数据时,当前缓存版本号设为1,更新缓存数据时,当前缓存版本号字段为原版本号字段加1)为key值,向缓存数据表cache_data插入查询结果集list。同时向缓存进度表cache_progress中插入缓存进度信息,缓存进度表cache_progress中的key值与cache_data中的key值保持一致。同样的,缓存数据表cache_data中每更新一批数据(可以任意设置,例如100条),同时更新缓存进度表的cache_progress_Value中实时的缓存数据条数data_count。当缓存数据完成后,缓存进度表的cache_progress_Value中的缓存完成字段cache_finish置为1,同时将缓存数据的日志信息插入或更新缓存日志信息表cache_log。
其中,将缓存数据的日志信息插入缓存日志信息表cache_log包括插入缓存日志主键(自增id)、缓存主键(由原始查询sql和查询条件组成的表达式使用SHA256算法转换得到)、原始查询sql、原始查询条件、缓存版本号字段(初始为1)、缓存完成时间戳字段、缓存过期时长字段(秒,默认值)、缓存数据条数字段、强制更新字段(初始为false)等。将缓存数据的日志信息更新到缓存日志信息表cache_log中包括更新缓存版本号字段、缓存完成时间戳字段、缓存数据条数字段和强制刷新字段等。
具体地,执行创建缓存数据的子线程时,当缓存数据完成后,将缓存日志信息插入到缓存日志信息表。执行刷新缓存数据的子线程时,当缓存数据完成后,更新缓存版本号字段为原版本号字段加1,更新缓存完成时间戳字段、缓存数据条数字段和强制刷新字段。即,执行创建或刷新缓存数据的子线程时,当缓存数据完成后,执行插入新的缓存日志操作,或执行更新缓存版本号、缓存完成时间戳、缓存数据条数和强制刷新等字段操作。插入或更新缓存日志信息表cache_log之后,将分布式锁解锁,创建或刷新缓存数据子线程的执行操作完成。
请继续参阅图3,启动创建或刷新缓存数据的子线程后,在创建或刷新缓存数据过程中,读取用户查询页码对应的缓存数据或最大页码对应的缓存数据的方法包括:
计算用户查询页码对应的缓存数据条数区间;通过由缓存主键、分隔符和当前缓存版本号字段构成的当前缓存版本的key值,轮询对应缓存进度表中cache_progress_value中的实时的缓存数据条数data_count,当已经缓存的缓存数据条数data_count满足用户查询页码时,即当已缓存数据条数满足缓存数据条数区间时,从key值对应的缓存数据表中读取该缓存数据条数区间对应的缓存数据。例如,每页放100条数据,用户查询第2页,用户查询页码对应的缓存数据条数区间则为第101-200条缓存数据,已缓存的数据条数data_count有200条可以满足用户查询的第2页,则读取第2页缓存数据,即第101-200条缓存数据;当已经缓存的缓存数据条数data_count不满足用户查询页码时,即当已缓存数据条数不满足缓存数据条数区间时,根据缓存完成标志字段cache_finish判断是否缓存完成,若缓存没有完成,则继续轮询缓存进度表中的缓存数据条数直至已缓存数据条数满足用户查询页码对应的缓存数据条数区间;若缓存已完成,说明此页码为最大页码,读取符合最大页码数的缓存数据,例如用户点“下一页”查询时,由于设置的每一页放置100条数据,但是最后一页不够100条数据了,即使已经缓存的缓存数据条数data_count不满足用户查询页码,依然将剩下的不到100条数据全部读取出来,即读取最大页码对应的缓存数据,查询结束。
如果基于redis的分布式锁对缓存主键上锁不成功,说明此时正在刷新缓存数据,则从当前正在创建或刷新缓存数据过程中读取用户查询页码对应的缓存数据或最大页码对应的缓存数据。根据当前缓存版本的key值轮询对应缓存进度表cache_progress。当已经缓存的缓存数据条数data_count满足查询页码对应的缓存数据条数区间时,从key值对应的缓存数据表中读取缓存数据条数区间对应的缓存数据;当已经缓存的缓存数据条数data_count不满足查询页码对应的缓存数据条数区间时,判断缓存完成标志字段cache_finish是否标志完成,如果缓存没有完成,则继续轮询,如果缓存已完成,说明此页码为最大页码,读取符合最大页码数的缓存数据,查询结束。
可见,利用本发明实施例提供的一种缓存数据的分页查询方法,可以使用户第一次查询缓存数据或者需要刷新缓存数据时,能够在缓存数据结果集的同时,及时读取查询请求相应页码的缓存数据返回给用户。尤其是在数据结果集较大时,大大提升了用户查询的响应速度,尤其是在查询的数据结果集较大时改善了用户的使用体验。
实施例二
本发明实施例提供一种缓存数据的分页查询系统,包括请求接收模块、判断模块以及数据读取模块,其中,
请求接收模块用于接收用户的查询请求,所述用户的查询请求包括原始查询sql和查询条件;
判断模块用于根据原始查询sql和所述查询条件判断是否需要创建或刷新缓存数据;
数据读取模块,用于在需要创建或刷新缓存数据时,启动创建或刷新缓存数据的子线程,同时轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或缓存完成时读取最大页码对应的缓存数据;
或者用于在不需要创建或刷新缓存数据时,则从已有缓存数据中读取用户请求页面的缓存数据。
本发明提供的缓存数据的分页查询系统,采用上述缓存数据的分页查询方法,在缓存数据的同时实现了数据分页查询请求的快速响应,提升了用户体验。与现有技术相比,本发明实施例提供的缓存数据的分页查询系统的有益效果与上述实施例一提供的缓存数据的分页查询方法的有益效果相同,且该系统中的其他技术特征与上一实施例方法公开的特征相同,在此不做赘述。
实施例三
一种计算机可读存储介质,其具有存储在其上的计算机可读程序指令,该计算机可读程序指令用于执行上述实施例一所述的方法。
本发明实施例提供的计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、系统或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、系统或者器件使用或者与其结合使用。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读存储介质可以是电子设备中所包含的;也可以是单独存在,而未装配入电子设备中。
上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被电子设备执行时,使得电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该单元本身的限定,例如,判断模块还可以被描述为“用于判断是否需要创建或刷新缓存数据的模块”。
本发明提供的计算机可读存储介质,存储有用于执行上述缓存数据的分页查询方法的计算机可读程序指令,在缓存数据的同时实现了数据分页查询请求的快速响应,提升了用户体验。与现有技术相比,本发明实施例提供的计算机可读存储介质的有益效果与上述实施例一提供的缓存数据的分页查询方法的有益效果相同,在此不做赘述。
应当理解,本发明公开的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式的描述中,具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (9)

1.一种缓存数据的分页查询方法,其特征在于,包括步骤:
接收用户的查询请求,所述用户的查询请求包括原始查询sql和查询条件;
将原始查询sql和查询条件组成的表达式使用SHA256算法转换得到唯一的缓存主键;
基于所述缓存主键判断是否已存在用户查询请求对应的缓存数据;若不存在缓存数据,则输出创建缓存数据的指令;若已存在缓存数据,则进一步判断已有缓存数据是否需要强制刷新;若需要强制刷新,则输出刷新缓存数据的指令;若不需要强制刷新,则进一步判断已有缓存数据是否已过期;若已过期,则输出刷新缓存数据的指令;若未过期,则输出不刷新缓存数据的指令;
根据所述创建缓存数据的指令或刷新缓存数据的指令,启动创建或刷新缓存数据的子线程,同时在创建或刷新缓存数据过程中轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或者缓存完成时读取最大页码对应的缓存数据;若不需要,则从已有缓存数据中读取用户请求页面的缓存数据。
2.根据权利要求1所述的缓存数据的分页查询方法,其特征在于,基于所述缓存主键检索缓存日志表以判断是否已存在用户查询请求对应的缓存数据;
根据缓存日志表中的强制刷新字段判断已有缓存数据是否需要强制刷新;
根据缓存日志表中的缓存完成时间戳字段和缓存过期时长字段判断已有缓存数据是否已过期。
3.根据权利要求1所述的缓存数据的分页查询方法,其特征在于,利用基于redis的分布式锁对所述缓存主键上锁,以实现启动创建或刷新缓存数据的子线程,其中,创建或刷新缓存数据的子线程执行动作的步骤包括:
以所述缓存主键、分隔符和当前缓存版本号字段作为key值,向缓存数据表插入查询结果集,同时向缓存进度表插入缓存进度信息,其中,缓存进度表中的key值与缓存数据表中的key值保持一致,创建缓存数据时,当前缓存版本号设为1,更新缓存数据时,当前缓存版本号字段为原版本号字段加1;
缓存数据表中每更新一批数据,同时更新缓存进度表中的缓存数据条数;
当缓存数据完成后,缓存进度表中的缓存完成字段置为1,同时将缓存数据的日志信息插入或更新到缓存日志信息表中,并将分布式锁解锁。
4.根据权利要求3所述的缓存数据的分页查询方法,其特征在于,将缓存数据的日志信息插入到缓存日志信息表包括插入缓存主键、原始查询sql、原始查询条件、缓存版本号字段、缓存完成时间戳字段、缓存过期时长字段、缓存数据条数字段和强制刷新字段;
将缓存数据的日志信息更新到缓存日志信息表包括更新缓存版本号字段、缓存完成时间戳字段、缓存数据条数字段和强制刷新字段。
5.根据权利要求4所述的缓存数据的分页查询方法,其特征在于,当前正在创建或刷新缓存数据时,基于redis的分布式锁对所述缓存主键上锁失败,则从当前正在创建或刷新缓存数据过程中读取用户查询页码对应的缓存数据或最大页码对应的缓存数据。
6.根据权利要求4或5所述的缓存数据的分页查询方法,其特征在于,在创建或刷新缓存数据过程中,读取用户查询页码对应的缓存数据或最大页码对应的缓存数据的方法包括:
计算用户查询页码对应的缓存数据条数区间;
通过当前缓存版本的key值,轮询对应的缓存进度表中的缓存数据条数;
当已缓存数据条数满足所述缓存数据条数区间时,从所述key值对应的缓存数据表中读取所述缓存数据条数区间对应的缓存数据;
当已缓存数据条数不满足所述缓存数据条数区间时,判断是否缓存完成,若缓存没有完成,则继续轮询缓存进度表中的缓存数据条数直至已缓存数据条数满足所述缓存数据条数区间,若缓存已完成,则读取最大页码对应的缓存数据。
7.根据权利要求1所述的缓存数据的分页查询方法,其特征在于,当不需要创建或刷新缓存数据时,从已有缓存数据中读取用户请求页面的缓存数据的方法包括:
利用缓存日志表中的缓存数据条数字段得到缓存数据的总条数和总页码数;
以所述缓存主键、分隔符和缓存版本号组成key值去匹配缓存数据表的key值,得到已存在的缓存数据;
根据用户的查询请求页码读取相应页面的缓存数据。
8.一种缓存数据的分页查询系统,其特征在于,包括请求接收模块、判断模块以及数据读取模块,其中,
所述请求接收模块用于接收用户的查询请求,所述用户的查询请求包括原始查询sql和查询条件;
所述判断模块用于将原始查询sql和查询条件组成的表达式使用SHA256算法转换得到唯一的缓存主键;基于所述缓存主键判断是否已存在用户查询请求对应的缓存数据;若不存在缓存数据,则输出创建缓存数据的指令;若已存在缓存数据,则进一步判断已有缓存数据是否需要强制刷新;若需要强制刷新,则输出刷新缓存数据的指令;若不需要强制刷新,则进一步判断已有缓存数据是否已过期;若已过期,则输出刷新缓存数据的指令;若未过期,则输出不刷新缓存数据的指令;
所述数据读取模块,用于在需要创建或刷新缓存数据时,根据所述创建缓存数据的指令或刷新缓存数据的指令,启动创建或刷新缓存数据的子线程,同时轮询缓存进度表,直至已缓存数据条数满足用户查询页码时读取用户查询页码对应的缓存数据,或缓存完成时读取最大页码对应的缓存数据;
或者用于在不需要创建或刷新缓存数据时,则从已有缓存数据中读取用户请求页面的缓存数据。
9.一种计算机可读存储介质,其具有存储在其上的计算机可读程序指令,所述计算机可读程序指令用于执行根据权利要求1至7中任一项所述的方法。
CN202010136438.8A 2020-03-02 2020-03-02 缓存数据的分页查询方法、系统及计算机可读存储介质 Active CN111367952B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010136438.8A CN111367952B (zh) 2020-03-02 2020-03-02 缓存数据的分页查询方法、系统及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010136438.8A CN111367952B (zh) 2020-03-02 2020-03-02 缓存数据的分页查询方法、系统及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN111367952A CN111367952A (zh) 2020-07-03
CN111367952B true CN111367952B (zh) 2023-08-25

Family

ID=71210224

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010136438.8A Active CN111367952B (zh) 2020-03-02 2020-03-02 缓存数据的分页查询方法、系统及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111367952B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112069207B (zh) * 2020-08-27 2023-10-03 重庆攸亮科技股份有限公司 一种多表联合查询效率提升方法
CN112699147A (zh) * 2020-12-31 2021-04-23 京东数字科技控股股份有限公司 分页查询方法、装置、设备及存储介质
WO2022152397A1 (en) * 2021-01-18 2022-07-21 Huawei Technologies Co., Ltd. Controller for a cache and method for controlling a cache

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077397A (zh) * 2014-07-01 2014-10-01 成都康赛信息技术有限公司 一种分布式的大数据分类检索网页的响应方法
CN104376097A (zh) * 2014-11-25 2015-02-25 同程网络科技股份有限公司 基于Windows服务程序的主动式缓存方法
CN105630819A (zh) * 2014-11-03 2016-06-01 阿里巴巴集团控股有限公司 一种缓存数据的刷新方法和装置
CN106570060A (zh) * 2016-09-30 2017-04-19 微梦创科网络科技(中国)有限公司 一种信息流中数据的随机抽取方法及装置
CN106934057A (zh) * 2017-03-22 2017-07-07 福建中金在线信息科技有限公司 一种分页缓存数据的更新方法和装置
CN109460404A (zh) * 2018-09-03 2019-03-12 中新网络信息安全股份有限公司 一种基于redis的高效Hbase分页查询方法
CN110597859A (zh) * 2019-09-06 2019-12-20 天津车之家数据信息技术有限公司 一种分页查询数据的方法和装置
CN110737857A (zh) * 2019-09-11 2020-01-31 苏州浪潮智能科技有限公司 一种后端分页加速方法、系统、终端及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077397A (zh) * 2014-07-01 2014-10-01 成都康赛信息技术有限公司 一种分布式的大数据分类检索网页的响应方法
CN105630819A (zh) * 2014-11-03 2016-06-01 阿里巴巴集团控股有限公司 一种缓存数据的刷新方法和装置
CN104376097A (zh) * 2014-11-25 2015-02-25 同程网络科技股份有限公司 基于Windows服务程序的主动式缓存方法
CN106570060A (zh) * 2016-09-30 2017-04-19 微梦创科网络科技(中国)有限公司 一种信息流中数据的随机抽取方法及装置
CN106934057A (zh) * 2017-03-22 2017-07-07 福建中金在线信息科技有限公司 一种分页缓存数据的更新方法和装置
CN109460404A (zh) * 2018-09-03 2019-03-12 中新网络信息安全股份有限公司 一种基于redis的高效Hbase分页查询方法
CN110597859A (zh) * 2019-09-06 2019-12-20 天津车之家数据信息技术有限公司 一种分页查询数据的方法和装置
CN110737857A (zh) * 2019-09-11 2020-01-31 苏州浪潮智能科技有限公司 一种后端分页加速方法、系统、终端及存储介质

Also Published As

Publication number Publication date
CN111367952A (zh) 2020-07-03

Similar Documents

Publication Publication Date Title
CN111367952B (zh) 缓存数据的分页查询方法、系统及计算机可读存储介质
CN107943594B (zh) 数据获取方法和装置
US7711720B2 (en) Application server, cache program, and application server system
US10891302B2 (en) Scalable synchronization with cache and index management
CN112925661A (zh) 消息处理方法、装置、计算机设备及存储介质
CN111414379A (zh) 序列号生成方法、装置、设备及计算机可读存储介质
CN105740383A (zh) 一种大数据平台下数据库与缓存的数据一致性方法及系统
CN106354732B (zh) 一种支持并发协同的离线数据版本冲突解决方法
CN113495872A (zh) 分布式数据库中的事务处理方法及系统
CN111125213A (zh) 数据采集的方法、装置及其系统
CN113360284A (zh) 资源管理方法、装置及设备
CN109871338B (zh) 一种数据存储方法、装置及计算机设备
WO2021147773A1 (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
US20230098361A1 (en) Stand In Tables
CN116719794A (zh) 一种数据处理方法、装置、电子设备、介质及程序产品
CN111125129A (zh) 数据处理方法和装置、存储介质及处理器
CN106371867B (zh) 金融设备软件更新方法及系统
CN113641761A (zh) 数据同步方法及装置
CN113687920B (zh) 一种分布式系统的对象策略操作方法、装置及设备
CN106682197B (zh) 一种搜索缓存更新方法及装置
CN108491448B (zh) 一种数据推送的方法和装置
CN113301180A (zh) 对象标识符解析方法、装置、设备及存储介质
CN113553488A (zh) 搜索引擎中索引数据的更新方法、装置、电子设备及介质
CN111405015A (zh) 一种数据处理方法、装置、设备及存储介质
CN108255848B (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
GR01 Patent grant
GR01 Patent grant