一种分页查询数据的方法和装置制造方法及图纸

技术编号:22883922 阅读:19 留言:0更新日期:2019-12-21 07:17
本发明专利技术公开了一种分页查询数据的方法,适于在分布式系统中执行,其中,所述分布式系统包括数据库服务器、缓存服务器和应用服务器,应用服务器适于接收客户端的请求,缓存服务器适于从缓存中获取数据,数据库服务器适于从数据库中获取数据,缓存中预先设置数据结构为set集合的分页标志键。方法包括:获取接口被调用时的请求参数;基于请求参数,生成分页标志值;获取数据库的二进制日志,以判断数据库中的数据是否发生变化;将分页标志值写入分页标志键对应的集合中,并接收返回值,其中,当数据库中的数据发生变化时,则清空分页标志键对应的集合,以便更新返回值;以及基于返回值,从缓存或数据库中分页获取查询数据。

A method and device of paging data query

【技术实现步骤摘要】
一种分页查询数据的方法和装置
本专利技术涉及数据处理
,尤其涉及一种分页查询数据的方法、装置和系统。
技术介绍
Redis是一个key-value数据结构存储系统,支持的数据结构包括string字符串、list链表、set集合、zset有序集合和hash散列。在实际业务中,经常会将一些数据缓存到Redis中,当数据量比较大时,分页缓存数据可以缓解数据库的压力。在接口被调用时,服务端会根据传入参数对每一页数据用Redis进行缓存,当接口再次被调用时直接从缓存中返回数据,而不用查询数据库,这样可以提高接口性能。如果接口列表数据发生变化,当接口被调用时,服务端则忽略缓存,直接从数据库中查询数据并更新缓存。在大数据高并发情况下,终端向服务器发送分页数据请求时,就需要根据实际情况来判断分页接口是否应用当前缓存。判断接口是否应用当前缓存通常有两种方式,一种方式是每页设置相同的缓存过期时间,过期时则缓存失效,从数据库查询数据。这种方式在列表数据发生变化时,可能由于缓存没有过期,导致新增数据无法实时反映在列表中。由于每页调用时间不一样且缓存过期时间点也不一样,可能出现不同页间数据有重复。一种方式是不使用缓存,直接从查询数据库。这种方式在分页接口访问量或并发量较大时会出现严重的性能问题。因此,需要一种分页查询数据的方法,能够保证不同页之间的数据不重复,并且达到数据库和缓存中的数据实时同步的目的。
技术实现思路
为此,本专利技术提供了一种分页查询数据的方法,以力图解决或者至少缓解上面存在的至少一个问题。根据本专利技术的一个方面,提供了一种分页查询数据的方法,该方法适于在分布式系统中执行,其中,分布式系统包括相互耦接的数据库服务器、缓存服务器和应用服务器,应用服务器适于接收客户端对应用程序接口调用的分页查询数据请求,缓存服务器适于从缓存中获取数据,所述数据库服务器适于从数据库中获取数据,所述缓存中预先设置数据结构为set集合的分页标志键。在该方法中,首先,获取分页查询数据的请求参数。然后,基于请求参数,生成分页标志值。并且获取数据库的二进制日志,以判断所述数据库中的数据是否发生变化。接着,将所述分页标志值写入所述分页标志键对应的集合中,并接收返回值,其中,当数据库中的数据发生变化时,则清空所述分页标志键对应的集合,以便更新所述返回值。最后,基于所述返回值,从缓存或数据库中分页获取查询数据。可选地,在上述方法中,请求参数包括当前页码和每页显示的数据量。可选地,在上述方法中,二进制日志适于记录数据库的操作信息,所述操作信息包括数据库中数据的删除、增加或修改。可选地,在上述方法中,当查询数据所在的数据库表中数据发生变化时,则删除所述分页标志键对应的集合中所有的元素。可选地,在上述方法中,当所述分页标志键对应的集合中不存在所述分页标志值时,则返回值为1;当所述分页标志键对应的集合中已存在所述分页标志值时,则返回值为0。可选地,在上述方法中,如果返回值为1,则从数据库中分页获取查询数据并将查询数据更新到缓存;如果返回值为0,则从缓存中分页获取查询数据。可选地,在上述方法中,数据库为MySQL数据库,所述缓存为Redis缓存。根据本专利技术的另一个方面,提供一种分页查询数据的装置,其中,包括:获取模块、生成模块、判断模块、写入模块和查询模块。其中,获取模块适于获取分页查询数据的请求参数。生成模块,适于基于请求参数,生成分页标志值。判断模块,适于获取数据库的二进制日志,以判断所述数据库中的数据是否发生变化。写入模块,适于将所述分页标志值写入所述分页标志键对应的集合中,并接收返回值,其中,当数据库中的数据发生变化时,则清空所述分页标志键对应的集合,以便更新所述返回值。查询模块,适于基于所述返回值,从缓存或数据库中分页获取查询数据。根据上述方案,通过在缓存中维护一个数据结构为集合的分页标志键,并且根据每次分页查询请求中的参数生成唯一的分页标志值,基于将分页标志值写入分页标志键的返回结果来判断是否从缓存中获取数据,可以保证不同页之间的数据不重复;在影响分页的数据发生变化时,通过清空分页标志键对应的集合来实时更新返回值,可以达到数据库与缓存数据一致的目的。附图说明为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。图1示出了根据本专利技术的一个实施例的分布式系统100的结构示意图;图2示出了根据本专利技术的一个实施例的分页查询数据的方法200的示意性流程图;图3示出了根据本专利技术的一个实施例的分页查询数据的示意性流程图;图4示出了根据本专利技术的一个实施例的分页查询数据的装置400的示意性结构图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。引入缓存可以缓解数据库的压力,提高性能和响应用户请求的速度。其中,缓存就是在内存中存储的数据备份,尽量避免直接从数据库查询数据,而是去缓存中读取数据。当数据量较大时,分页查询数据是一种常见的性能优化方法,一般情况下,客户端通过传递页码、每页条数两个参数去分页查询数据。首先接口被调用时,服务端会根据传入的参数对每一页数据进行缓存。然后,当再次调用接口时直接从缓存中返回数据,以提高接口性能,如果接口列表数据发生变化时,服务端则忽略缓存重新从数据库中查询数据,并更新缓存中的数据。那么,如何根据实际情况判断是否应用当前缓存呢?本方案提供了一种分页查询数据的方法,能够适用于大数据的应用场景,保证数据库与缓存的一致性,在分页查询数据时,保证不同页之间的数据不会有重复。图1示出了根据本专利技术的一个实施例的分布式系统100的示意性结构图。如图1所示,分布式系统100包括应用服务器110、数据库服务器120和缓存服务器130。其中,应用服务器110适于接收客户端对应用程序接口调用的分页查询数据的请求,数据库服务器120适于从数据库中获取数据,缓存服务器130适于从缓存中获取数据。根据本专利技术的一个实施例,缓存为Redis分布式缓存,数据库为MySQL分布式数据库。Redis是一种内存高速缓存数据库,其数据模型为key-value,同时还提供string、list、set、zset、hash数据结构的存储。Mysql数据库可以实现分布式集群部署。在本专利技术的一个实现方式中,Redis缓存中预先设置数据结构为set集合的分页标志键。其中,set是无序集合,是通过哈希表实现的,所以添加、删除、查找的复杂度都是0(1)。集合中的元本文档来自技高网...

【技术保护点】
1.一种分页查询数据的方法,适于在分布式系统中执行,其中,所述分布式系统包括相互耦接的数据库服务器、缓存服务器和应用服务器,所述应用服务器适于接收客户端调用应用程序接口时分页查询数据的请求参数,所述缓存服务器适于从缓存中获取数据,所述数据库服务器适于从数据库中获取数据,所述缓存中预先设置数据结构为set集合的分页标志键,所述方法包括:/n获取分页查询数据的请求参数;/n基于请求参数,生成分页标志值;/n获取数据库的二进制日志,以判断所述数据库中的数据是否发生变化;/n将所述分页标志值写入所述分页标志键对应的集合中,并接收返回值,其中,当数据库中的数据发生变化时,则清空所述分页标志键对应的集合,以便更新所述返回值;以及/n基于所述返回值,从缓存或数据库中分页获取查询数据。/n

【技术特征摘要】
1.一种分页查询数据的方法,适于在分布式系统中执行,其中,所述分布式系统包括相互耦接的数据库服务器、缓存服务器和应用服务器,所述应用服务器适于接收客户端调用应用程序接口时分页查询数据的请求参数,所述缓存服务器适于从缓存中获取数据,所述数据库服务器适于从数据库中获取数据,所述缓存中预先设置数据结构为set集合的分页标志键,所述方法包括:
获取分页查询数据的请求参数;
基于请求参数,生成分页标志值;
获取数据库的二进制日志,以判断所述数据库中的数据是否发生变化;
将所述分页标志值写入所述分页标志键对应的集合中,并接收返回值,其中,当数据库中的数据发生变化时,则清空所述分页标志键对应的集合,以便更新所述返回值;以及
基于所述返回值,从缓存或数据库中分页获取查询数据。


2.如权利要求1所述的方法,其中,所述请求参数包括当前页码和每页显示的数据量。


3.如权利要求2所述的方法,其中,所述当数据库中的数据发生变化时,则清空所述分页标志键对应的集合的步骤包括:
当分页查询数据所在的数据库表中数据发生变化时,则删除所述分页标志键对应的集合中所有的元素。


4.如权利要求1所述的方法,其中,所述二进制日志适于记录数据库的操作信息,所述操作信息包括数据库中数据的...

【专利技术属性】
技术研发人员:韩天伟李荣尊
申请(专利权)人:天津车之家数据信息技术有限公司
类型:发明
国别省市:天津;12

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

1