本申请涉及数据库领域,特别是指一种数据读取方法及装置。
背景技术:
1、当前已迈入了互联网时代,随着用户数量的增长,数据的访问量和存储量也呈指数倍增长。高并发指在同一个时间点,有许多用户同时访问统一资源定位符(uniformresource locator,url)地址,高并发会导致站点服务器和数据库服务器资源被占满崩溃,导致数据无法进行正常存储和更新。当并发访问量超过一定阈值的时候,后端的数据访问骤增,而传统的关系数据库管理系统(relational database management system,rdbms)处理海量数据乏力,因此难以处理高并发的读操作和写操作。
2、目前,可以采用对数据库增加缓存的方式,利用缓存分担数据库的高访问量,然而缓存与数据库之间会存在数据同步不及时的问题。
技术实现思路
1、有鉴于此,本申请提供了一种数据读取方法及装置,从而达到能够在高并发场景下,有效缓解数据库的压力,并实现缓存与数据库之间数据一致性的目的。
2、本申请提供的一种数据读取方法是这样实现的:
3、接收应用程序发送的读取请求,读取请求用于读取目标数据库中的目标数据;
4、根据读取请求查询redis缓存,redis缓存用于同步目标数据库中的数据;若在redis缓存中查询到目标数据,则向应用程序返回目标数据;若在redis缓存中没有查询到目标数据,则查询多个消息队列,多个消息队列用于存放针对目标数据库的更新请求;redis缓存用于根据更新请求删除数据,目标数据库用于根据更新请求更新数据;
5、若在多个消息队列中没有查询到目标数据,则查询目标数据库的从库,从库用于实时同步目标数据库中的数据;若在多个消息队列中查询到目标数据,则在第一预设时间内多次查询多个消息队列,直至在多个消息队列无法查询到目标数据,则查询从库;
6、基于从库,读取并向应用程序返回目标数据。
7、可选地,方法还包括:
8、接收应用程序发送的更新请求,更新请求包括:增加、删除或修改数据;
9、利用哈希算法,对更新请求的编号进行哈希取余,得到余数,并根据余数从多个消息队列中确定目标队列;
10、将更新请求写入目标队列,并利用redis缓存从目标队列中读取更新请求;
11、删除redis缓存中更新请求对应的数据,并根据更新请求对目标数据库进行数据更新;
12、根据数据更新后的目标数据库,异步对redis缓存以及从库进行数据同步。
13、可选地,方法还包括:
14、若redis缓存宕机,则利用目标数据库从多个消息队列中读取更新请求,并根据更新请求对目标数据库进行数据更新。
15、可选地,查询多个消息队列之前,还包括:
16、延时第二预设时间后,重新查询redis缓存,并确定在redis缓存中没有查询到目标数据。
17、可选地,方法还包括:
18、重新查询redis缓存时,在redis缓存中查询到目标数据,则向应用程序返回目标数据。
19、可选地,在多个消息队列中查询到目标数据之后,还包括:
20、若在第一预设时间之后,仍在多个消息队列中查询到目标数据,则发送异常提示信息。
21、可选地,方法还包括:
22、在第三预设时间内,若接收更新请求的次数大于请求次数阈值,则采用数据库集群的方式重新部署目标数据库,数据库集群中的各个数据库对应的数据不存在重复。
23、可选地,方法还包括:
24、在第四预设时间内,若接收读取请求的次数大于读取次数阈值,则采用redis集群的方式重新部署redis缓存,redis集群中的各个redis所存储的数据不存在重复。
25、本申请还提供了一种数据读取装置,包括:
26、接收模块,用于接收应用程序发送的读取请求,读取请求用于读取目标数据库中的目标数据;
27、查询模块,用于根据读取请求查询redis缓存,redis缓存用于同步目标数据库中的数据;若在redis缓存中查询到目标数据,则向应用程序返回目标数据;若在redis缓存中没有查询到目标数据,则查询多个消息队列,多个消息队列用于存放针对目标数据库的更新请求;redis缓存用于根据更新请求删除数据,目标数据库用于根据更新请求更新数据;
28、查询模块,还用于若在多个消息队列中没有查询到目标数据,则查询目标数据库的从库,从库用于实时同步目标数据库中的数据;若在多个消息队列中查询到目标数据,则在第一预设时间内多次查询多个消息队列,直至在多个消息队列无法查询到目标数据,则查询从库;
29、读取模块,用于基于从库,读取并向应用程序返回目标数据。
30、本申请还提供了一种计算机设备,包括:处理器,处理器与存储器耦合,存储器中存储有至少一条计算机程序指令,至少一条计算机程序指令由处理器加载并执行,以使计算机设备实现上述数据读取方法。
31、因此,本申请的有益效果是:通过设置redis缓存、消息队列以及目标数据库的从库,由于redis缓存和从库均用于同步目标数据库中的数据,当面临高并发的数据读取时,可以优先查询redis缓存,从而可以减轻目标数据库的压力,而在redis缓存没有查询到目标数据时可以认为redis缓存已根据消息队列中的更新请求进行数据删除,此时为了避免目标数据库还未进行数据更新,或者redis缓存与目标数据库中的数据无法及时同步的情况,因此需要在消息队列中查询不到待查询的内容时再对从库进行查询,此时查询到的内容均与更新后的目标数据库中的数据一致,可以解决数据同步不及时的问题。此外,通过设置从库,目标数据库仅需进行数据更新,而数据读取的任务均由redis缓存和从库进行,可以进一步缓解目标数据库的压力。
1.一种数据读取方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求1所述的方法,其特征在于,所述查询多个消息队列之前,还包括:
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,所述在所述多个消息队列中查询到所述目标数据之后,还包括:
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
9.一种数据读取装置,其特征在于,所述装置包括:
10.一种计算机设备,其特征在于,所述计算机设备包括:处理器,所述处理器与存储器耦合,所述存储器中存储有至少一条计算机程序指令,所述至少一条计算机程序指令由所述处理器加载并执行,以使所述计算机设备实现权利要求1-8中任一项所述的方法。
