CN115576966A - 数据更新方法、装置、存储介质及电子装置 - Google Patents
数据更新方法、装置、存储介质及电子装置 Download PDFInfo
- Publication number
- CN115576966A CN115576966A CN202211203452.0A CN202211203452A CN115576966A CN 115576966 A CN115576966 A CN 115576966A CN 202211203452 A CN202211203452 A CN 202211203452A CN 115576966 A CN115576966 A CN 115576966A
- Authority
- CN
- China
- Prior art keywords
- data
- database
- cache
- updating
- time
- 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
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000012217 deletion Methods 0.000 claims description 11
- 230000037430 deletion Effects 0.000 claims description 11
- 230000001360 synchronised effect Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 9
- 238000012790 confirmation Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000005406 washing Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000004887 air purification Methods 0.000 description 1
- 235000019504 cigarettes Nutrition 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000004622 sleep time Effects 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据更新方法、装置、存储介质及电子装置,涉及智慧家庭技术领域,该数据更新方法包括:获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,采用上述技术方案,解决了如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题。
Description
技术领域
本申请涉及智慧家庭技术领域,具体而言,涉及一种数据更新方法、装置、存储介质及电子装置。
背景技术
目前,数据访问的过程一般是用户并发访问业务系统的数据,由系统返回响应信息。但是在现代互联网高并发的业务场景下,对于不定时的高并发的访问时产生的大量数据IO操作,这些数据访问请求的操作如果直接到数据库,很有可能直接造成数据库的宕机和不可用。由此,造成较为严重的业务故障或系统异常。
基于以上的问题,我们需要在业务系统和数据库系统之间引入一层缓存,让高并发的用户请求IO操作,先查询缓存。然而随着缓存技术的引入,又会导致数据的不一致性问题,即数据库更新后和缓存数据的一致性问题。
因此,相关技术中,存在如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题。
针对相关技术中,如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题,尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种数据更新方法、装置、存储介质及电子装置,以至少解决相关技术中,如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题。
根据本申请实施例的一个实施例,提供了一种数据更新方法,包括:获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
在一个示例性实施例中,在将所述缓存中保存的第一数据更新为所述第二数据之后,所述方法还包括:在获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,根据所述ACK标识确定第一查询指令;基于所述第一查询指令从第二数据库查询到第三数据,所述第二数据库为所述第一数据库的备份数据库,所述第三数据表示所述第二数据的备份数据;在确定所述第二数据和所述第三数据一致的情况下,向终端设备发送用于表示更新成功的通知消息。
在一个示例性实施例中,将所述缓存中保存的第一数据更新为所述第二数据,包括:确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间;根据所述备份时间生成用于延迟缓存删除操作的延时队列,其中,所述延时队列对应有延时执行时间,所述延时执行时间的开始时刻为所述第一数据库中的第一数据变更为第二数据的变更时刻,所述延时执行时间的结束时刻晚于所述备份时间的结束时刻;根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据。
在一个示例性实施例中,根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据,包括:在经过所述延时执行时间之后,基于所述缓存删除操作将所述缓存中的第一数据删除;从所述第二数据库内读取第三数据,并将所述第三数据写入所述缓存。
在一个示例性实施例中,确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间,包括:确定将所述第一数据库中的第二数据备份至第二数据库时的历史备份时间,基于所述历史备份时间确定所述备份时间,包括以下之一:将使用时间最长的历史备份时间设置为所述备份时间;将使用频次最高的历史备份时间设置为所述备份时间;将使用时间最新的历史备份时间设置为所述备份时间。
在一个示例性实施例中,确定将所述第一数据库中的第二数据备份至第二数据库时所需的备份时间,包括:根据所述第一数据库的类型、所述第二数据库的类型和所述第一数据库中的第二数据备份至第二数据库时的网络状态确定将所述第一数据库中的第二数据备份至第二数据库时的备份时间,以根据所述备份时间确定将所述第一数据库中的第二数据备份至第二数据库。
在一个示例性实施例中,所述方法还包括:在确定所述第一数据库、所述第二数据库和所述缓存中均查询不到所述第一数据的情况下,向终端设备发送用于表示更新成功的通知消息;或者,在确定所述第一数据库和所述缓存中均查询到所述第二数据的情况下,向终端设备发送用于表示更新成功的通知消息;或者,在确定所述第二数据库和所述缓存中均查询到第三数据的情况下,向终端设备发送用于表示更新成功的通知消息。
根据本申请实施例的另一个实施例,还提供了一种数据更新装置,包括:第一更新模块,用于获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否更新;获取模块,用于在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;第二更新模块,用于确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
根据本申请实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述数据更新方法。
根据本申请实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述的数据更新方法。
在本申请实施例中,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;在确定所述更新标识指示所述第一数据库中的第一数据变更为,其中,和所述第一数据对应于同一数据标识的第二数据的情况下,从所述第一数据库中获取所述第二数据;确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据;采用上述技术方案,解决了如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题,进而在对缓存数据进行更新时,能够保证数据库中数据和缓存数据一致。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例的一种数据更新方法的硬件环境示意图;
图2是根据本申请实施例的数据更新方法的流程图;
图3是根据本申请实施例的数据更新方法的流程示意图;
图4是根据本申请实施例的数据更新方法的框架示意图;
图5是根据本申请实施例的一种无缓存的数据更新方法的示意图;
图6是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(一);
图7是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(二);
图8是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(三);
图9是根据本申请实施例的一种数据更新装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一个方面,提供了一种数据更新方法。该数据更新方法广泛应用于智慧家庭(Smart Home)、智能家居、智能家用设备生态、智慧住宅(IntelligenceHouse)生态等全屋智能数字化控制应用场景。可选地,在本实施例中,上述数据更新方法可以应用于如图1所示的由终端设备102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端设备102进行连接,可用于为终端或终端上安装的客户端提供服务(如应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务,可在服务器上或独立于服务器配置云计算和/或边缘计算服务,用于为服务器104提供数据运算服务。
上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:WIFI(Wireless Fidelity,无线保真),蓝牙。终端设备102可以并不限定于为PC、手机、平板电脑、智能空调、智能烟机、智能冰箱、智能烤箱、智能炉灶、智能洗衣机、智能热水器、智能洗涤设备、智能洗碗机、智能投影设备、智能电视、智能晾衣架、智能窗帘、智能影音、智能插座、智能音响、智能音箱、智能新风设备、智能厨卫设备、智能卫浴设备、智能扫地机器人、智能擦窗机器人、智能拖地机器人、智能空气净化设备、智能蒸箱、智能微波炉、智能厨宝、智能净化器、智能饮水机、智能门锁等。
在本实施例中提供了一种数据更新方法,应用于上述计算机终端,图2是根据本申请实施例的数据更新方法的流程图,该流程包括如下步骤:
步骤S202,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
需要说明的是,上述更新标识可以表示整个第一数据库的日志内容是否更新,也可以表示第一数据库内的指定数据的日志内容是否更新,本申请对此不作限制。
步骤S204,在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
其中,上述数据标识可以理解为识别数据值的唯一标识,例如键值对形式中,可以将数据标识理解为键,将数据标识对应的数据理解为值。具体的,例如以数据标识以键A为例,以第一数据为数据A1为例,以第二数据为A2为例,则第一数据对应于键A可以表示为{A,A1},当第一数据更新为第二数据之后,第二数据对应于键A可以表示为{A,A2}。
步骤S206,确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
通过上述步骤,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据,解决了相关技术中,如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题,进而在对缓存数据进行更新时,能够保证数据库中数据和缓存数据一致。
在一个示例性实施例中,在将所述缓存中保存的第一数据更新为所述第二数据之后,进一步的,还可以实现下述方案:在获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK(Acknowledge character)标识的情况下,根据所述ACK标识确定第一查询指令;基于所述第一查询指令从第二数据库查询到第三数据,所述第二数据库为所述第一数据库的备份数据库,所述第三数据表示所述第二数据的备份数据;在确定所述第二数据和所述第三数据一致的情况下,向终端设备发送用于表示更新成功的通知消息。
通过上述实施例,可以根据第二数据库内的第三数据与第二数据是否一致来确定是否是否更新成功,提高了数据更新结果的准确性。
在一个实施例中,在未获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,可以确定上述缓存没有成功更新,则基于重试机制重新更新缓存,并向终端设备发送用于表示重新更新的重试消息,其中,更新失败的原因可以包括断网、程序错误、由于无足够存储空间导致程序运行失败等,本申请不限于此。
或者,在未获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,直接将所述缓存中保存的第一数据更新为所述第三数据。
在其他实施例中,在确定所述第二数据和所述第三数据不一致的情况下,删除缓存内的第二数据,将所述缓存中保存的第一数据更新为所述第三数据。
在一个示例性实施例中,为了更好的理解上述步骤S206中如何实现将所述缓存中保存的第一数据更新为所述第二数据的过程,可以参照下述步骤:确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间;根据所述备份时间生成用于延迟缓存删除操作的延时队列,其中,所述延时队列对应有延时执行时间,所述延时执行时间的开始时刻为所述第一数据库中的第一数据变更为第二数据的变更时刻,所述延时执行时间的结束时刻晚于所述备份时间的结束时刻;根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据。
在一个示例性实施例中,针对根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据的步骤,提出了一种技术方案,具体包括:在经过所述延时执行时间之后,基于所述缓存删除操作将所述缓存中的第一数据删除;从所述第二数据库内读取第三数据,并将所述第三数据写入所述缓存。
在一个示例性实施例中,进而提出了一种确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间的技术方案,具体步骤包括:确定将所述第一数据库中的第二数据备份至第二数据库时的历史备份时间,基于所述历史备份时间确定所述备份时间,包括以下之一:将使用时间最长的历史备份时间设置为所述备份时间;将使用频次最高的历史备份时间设置为所述备份时间;将使用时间最新的历史备份时间设置为所述备份时间。
其中,基于所述历史备份时间确定所述备份时间还可以包括基于多个所述历史备份时间的均值确定所述备份时间。
在一个示例性实施例中,可选的,还提出了其他用于确定将所述第一数据库中的第二数据备份至第二数据库时所需的备份时间的技术方案,具体包括:根据所述第一数据库的类型、所述第二数据库的类型和所述第一数据库中的第二数据备份至第二数据库时的网络状态确定将所述第一数据库中的第二数据备份至第二数据库时的备份时间,以根据所述备份时间确定将所述第一数据库中的第二数据备份至第二数据库。
在一个示例性实施例中,可选的,还提出了一种向终端设备发送更新成功的通知消息的方案,具体方案包括:方案1、在确定所述第一数据库、所述第二数据库和所述缓存中均查询不到所述第一数据的情况下,向终端设备发送用于表示更新成功的通知消息;方案2、在确定所述第一数据库和所述缓存中均查询到所述第二数据的情况下,向终端设备发送用于表示更新成功的通知消息;或者,在确定所述第二数据库和所述缓存中均查询到第三数据的情况下,向终端设备发送用于表示更新成功的通知消息。
为了更好的理解上述数据更新方法的过程,以下再结合可选实施例对上述数据更新的实现方法流程进行说明,但不用于限定本申请实施例的技术方案。
在本实施例中提供了一种数据更新方法,图3是根据本申请实施例的数据更新方法的流程示意图,结合图3提出一种技术方案,具体步骤如下:
步骤S301:通过线程A执行写入数据的操作;
步骤S302:通过业务系统执行对数据更新的操作;
步骤S303:数据库更新成功;
步骤S304:通过消息队列订阅数据库的日志;
在一个实施例中,在线程A更新数据库成功后,使用消息队列监听数据库Binlog日志,把日志消息写入消息队列。
步骤S305:在根据消息队列的订阅消息确定数据库已经更新的情况下,对缓存进行更新;
步骤S306:缓存更新成功后向消息队列发送ACK确认消息;
步骤S307:缓存更新失败时,基于重试机制重新更新缓存;
在一个实施例中,缓存模块监听消息队列中的日志消息,如果监听到消息队列中有更新的日志消息,则立即执行消费操作,以更新缓存;在确定缓存模块成功消费了消息队列的更新日志时,缓存更新成功,继续返回给消息队列ACK标识,确认消费成功;如果缓存模块由于网络等原因,没有成功消费消息队列的更新日志,则缓存没有更新成功,无法反馈ACK标识。如果消息队列没有收到缓存消费成功的ACK标识,就基于重试机制再次控制缓存模块执行消费操作,直到收到缓存模块返回的ACK标识。确认线程A更新缓存完毕。
步骤S309:通过线程B执行读取数据的操作;
步骤S310:线程B从缓存中读取数据;
步骤S311:在缓存为空时,从数据库内读取数据;
步骤S312:根据数据库内读取到的数据更新缓存;
步骤S313:由缓存向业务系统反馈是否更新成功。
通过上述实施例,线程A更新数据库后,订阅数据库的binlog日志,将数据库更新的binlog日志相关的消息推送到消息队列,实现使用消息队列监听的Binlog日志,同步更新缓存,可以在不侵入到系统的业务代码的情况下实现解耦工作,这样,业务系统在运行过程中,缓存层也能及时同步数据库的更新数据,保证缓存和数据库数据的一致性。
在一个实施例中,图4是根据本申请实施例的数据更新方法的框架示意图,如图4所示,其中,业务系统用于写入数据到数据库,日志订阅中间件(Canal)订阅数据库更新binlog日志,将Binlog日志写入Message Quene,缓存模块用于消费消息队列中的消息从而更新缓存;Message Queue的重试机制确保缓存消费消息最终成功。
在高并发的业务系统中,通常业务系统是读多写少,可以采用数据库一主多从的方式,即设置主库可以读写,从库只读。这种读写分离的方式是将对数据库的读写操作分散到不同的节点上,能够小幅提升写性能,大幅提升读性能。基于此,本实施例采取高并发线程发起业务系统的读写请求,写主库,读从库,线程A执行数据库写操作,写主库;线程B、C执行数据库读取操作,读从库;其中,线程A执行写主数据库成功以后,另新建一个异步线程,更新缓存。在更新缓存时,需要订阅主数据库更新日志确定更新缓存的时机,基于延迟队列延迟缓存删除操作的目的,需要设置延迟队列消息的延迟时间大于主从复制的延迟时间。在主从数据库同步更新数据后,基于延迟队列消息的延迟时间删除缓存,以便线程B、C读取已经更新数据的从库,然后将数据写入缓存,最终保持数据库与缓存的一致性。
在其他实施例中,图5是根据本申请实施例的一种无缓存的数据更新方法的示意图,如图5所示,还可以直接向业务系统发起请求,查询数据库实现无缓存的数据更新方法,不过这种方法在高并发场景下容易造成数据库宕机或者无响应的问题。
可选的,在一个实施例中,为了更好的理解上述步骤步骤S309-S313的过程,结合图6对此过程进行说明,图6是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(一),具体步骤如下:
步骤S601、发起数据读取请求;
步骤S602、判断缓存中是否存在数据;若为是,则执行步骤S606,若为否,则执行步骤S603;
步骤S603、从数据库内加载需要读取的数据;
步骤S604、判断从数据库内读取的数据是否为空;若为是,则执行步骤S606,若为否,则执行步骤S605;
步骤S605、将数据库内读取的数据写入缓存;
步骤S606、返回从缓存中读取到的数据。
基于上述实施例,可选的,结合图7对先删除缓存,再更新数据库的情况进行说明。如图7所示,图7是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(二),线程A更新数据库时,线程A先删除缓存;随后线程B读取缓存,这个时候缓存为空,如果线程B查询数据库,此时线程A还没有更新数据库成功,线程B读取到的仍然是旧值。随后,线程A将数据库更新成功。线程A将缓存更新为新值。线程B将读取到的旧值写入缓存覆盖线程A上次写入的新值。最终的结果是缓存中是线程B的旧值,而数据库是线程A更新的新值,这个时候数据就和缓存发生了不一致结果。
本实施例中,如果先删除缓存,数据库还没有更新成功,此时缓存不存在新数据,需要从数据库中读取数据,并将读取到的数据写入缓存,此时缓存中的数据为旧数据。本实施例中,可以通过延时双删的方式实现数据的一致性,为了避免更新数据的时候,其他线程从缓存中读取不到数据的问题,在更新完数据库后,可以sleep(静默)一段时间,然后再次删除缓存即可。但是这种方式不能准确的估算sleep时间值,还可能存在数据不一致的问题。
在其他实施例中,可选的,结合图8对先更新数据库,图8是根据本申请实施例的一种有缓存的数据更新方法的流程示意图(三)。在删除缓存的情况进行说明。如图8所示,线程A更新数据库成功后,在更新缓存时,出现删除缓存失败或者还没有来得及删除缓存等问题就会导致更新失败。如果线程B去读缓存,此时缓存中的值为旧值,这个时候就出现了缓存不一致结果。
本实施例中,如果数据库更新成功了,但是缓存删除失败,那么此时数据库中的是新值,缓存中的是旧值,之后的读请求拿到的都是旧数据,只有等缓存失效后,才能存数据库中获得正确的值。本实施例中,可以在更新数据库成功后,往消息队列中发送消息,客户端消费到消息队列后删除缓存,此时借助于队列的重试机制来实现,达到最终的一致性效果。但是这种方式引入消息队列后,也会引入如何保证消息的丢失、延迟、时序性等问题,可能带来数据不一致的问题。
相比于图7-图8的数据更新方式,图3的实施例通过订阅数据库操作更新的Binlog日志,可以实时得到数据库的跟踪操作。基于发布订阅的消息中间件系统进行解耦,不侵入业务系统实现一些功能。通过线程A进行写操作,利用日志中间件(Canal)将消息实时写入MQ(Kafka、racketmq);通过缓存模块订阅消息队列的消息来更新缓存,如果失败,还可以利用重试机制重复更新,直至消息更新成功。使用重试机制可以提高缓存更新概率,不会因为一次失败导致缓存不再更新。并且,利用消息队列的消息时序性,不会出现更新缓存的乱序问题,可以解决多线程更新,数据库时序性问题。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
图9是根据本申请实施例的一种数据更新装置的结构框图;如图9所示,包括:
第一更新模块92,用于获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
需要说明的是,上述更新标识可以表示整个第一数据库的日志内容是否更新,也可以表示第一数据库内的指定数据的日志内容是否更新,本申请对此不作限制。
获取模块94,用于在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
其中,上述数据标识可以理解为识别数据值的唯一标识,例如键值对形式中,可以将数据标识理解为键,将数据标识对应的数据理解为值。具体的,例如以数据标识以键A为例,以第一数据为数据A1为例,以第二数据为A2为例,则第一数据对应于键A可以表示为{A,A1},当第一数据更新为第二数据之后,第二数据对应于键A可以表示为{A,A2}。
第二更新模块96,用于确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
通过上述装置,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据,解决了相关技术中,如何对缓存数据进行更新,以保证数据库中数据和缓存数据一致的技术问题,进而在对缓存数据进行更新时,能够保证数据库中数据和缓存数据一致。
在一个示例性实施例中,上述数据更新装置还包括:确定模块,用于在获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,根据所述ACK标识确定第一查询指令;基于所述第一查询指令从第二数据库查询到第三数据,所述第二数据库为所述第一数据库的备份数据库,所述第三数据表示所述第二数据的备份数据;在确定所述第二数据和所述第三数据一致的情况下,向终端设备发送用于表示更新成功的通知消息。
在一个实施例中,在未获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,可以确定上述缓存没有成功更新,则基于重试机制重新更新缓存,并向终端设备发送用于表示重新更新的重试消息,其中,更新失败的原因可以包括断网、程序错误、由于无足够存储空间导致程序运行失败等,本申请不限于此。
或者,在未获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,直接将所述缓存中保存的第一数据更新为所述第三数据。
在其他实施例中,在确定所述第二数据和所述第三数据不一致的情况下,删除缓存内的第二数据,将所述缓存中保存的第一数据更新为所述第三数据。
在一个示例性实施例中,上述第二更新模块96还用于确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间;根据所述备份时间生成用于延迟缓存删除操作的延时队列,其中,所述延时队列对应有延时执行时间,所述延时执行时间的开始时刻为所述第一数据库中的第一数据变更为第二数据的变更时刻,所述延时执行时间的结束时刻晚于所述备份时间的结束时刻;根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据。
在一个示例性实施例中,上述第二更新模块96还用于经过所述延时执行时间之后,基于所述缓存删除操作将所述缓存中的第一数据删除;从所述第二数据库内读取第三数据,并将所述第三数据写入所述缓存。
在一个示例性实施例中,上述第二更新模块96还用于确定将所述第一数据库中的第二数据备份至第二数据库时的历史备份时间,基于所述历史备份时间确定所述备份时间,包括以下之一:将使用时间最长的历史备份时间设置为所述备份时间;将使用频次最高的历史备份时间设置为所述备份时间;将使用时间最新的历史备份时间设置为所述备份时间。
其中,基于所述历史备份时间确定所述备份时间还可以包括基于多个所述历史备份时间的均值确定所述备份时间。
在一个示例性实施例中,上述第二更新模块96还用于将所述第一数据库中的第二数据备份至第二数据库时的标准备份时间设置为所述备份时间,其中,所述标准备份时间是根据所述第一数据库的类型、所述第二数据库的类型和所述第一数据库中的第二数据备份至第二数据库时的网络状态确定的。
在一个示例性实施例中,上述数据更新装置还包括:发送模块,用于在确定所述第一数据库、所述第二数据库和所述缓存中均查询不到所述第一数据的情况下,向终端设备发送用于表示更新成功的通知消息;或者,在确定所述第一数据库和所述缓存中均查询到所述第二数据的情况下,向终端设备发送用于表示更新成功的通知消息;或者,在确定所述第二数据库和所述缓存中均查询到第三数据的情况下,向终端设备发送用于表示更新成功的通知消息。
本申请的实施例还提供了一种存储介质,该存储介质包括存储的程序,其中,上述程序运行时执行上述任一项的方法。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
S2,在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
S3,确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
本申请的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
S2,在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
S3,确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种数据更新方法,其特征在于,包括:
获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
2.根据权利要求1所述的数据更新方法,其特征在于,在将所述缓存中保存的第一数据更新为所述第二数据之后,所述方法还包括:
在获取到所述缓存将所述第一数据更新为所述第二数据时所生成的更新确认ACK标识的情况下,根据所述ACK标识确定第一查询指令;
基于所述第一查询指令从第二数据库查询到第三数据,所述第二数据库为所述第一数据库的备份数据库,所述第三数据表示所述第二数据的备份数据;
在确定所述第二数据和所述第三数据一致的情况下,向终端设备发送用于表示更新成功的通知消息。
3.根据权利要求1所述的数据更新方法,其特征在于,将所述缓存中保存的第一数据更新为所述第二数据,包括:
确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间;
根据所述备份时间生成用于延迟缓存删除操作的延时队列,其中,所述延时队列对应有延时执行时间,所述延时执行时间的开始时刻为所述第一数据库中的第一数据变更为第二数据的变更时刻,所述延时执行时间的结束时刻晚于所述备份时间的结束时刻;
根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据。
4.根据权利要求3所述的数据更新方法,其特征在于,根据所述延时队列对应的延时执行时间将所述缓存中保存的第一数据更新为所述第二数据,包括:
在经过所述延时执行时间之后,基于所述缓存删除操作将所述缓存中的第一数据删除;
从所述第二数据库内读取第三数据,并将所述第三数据写入所述缓存。
5.根据权利要求3所述的数据更新方法,其特征在于,确定将所述第一数据库的第二数据备份至所述第二数据库的备份时间,包括:
确定将所述第一数据库中的第二数据备份至第二数据库时的历史备份时间,基于所述历史备份时间确定所述备份时间,包括以下之一:
将使用时间最长的历史备份时间设置为所述备份时间;
将使用频次最高的历史备份时间设置为所述备份时间;
将使用时间最新的历史备份时间设置为所述备份时间。
6.根据权利要求3所述的数据更新方法,其特征在于,确定将所述第一数据库中的第二数据备份至第二数据库时所需的备份时间,包括:
根据所述第一数据库的类型、所述第二数据库的类型和所述第一数据库中的第二数据备份至第二数据库时的网络状态确定将所述第一数据库中的第二数据备份至第二数据库时的备份时间,以根据所述备份时间确定将所述第一数据库中的第二数据备份至第二数据库。
7.根据权利要求2所述的数据更新方法,其特征在于,所述方法还包括:
在确定所述第一数据库、所述第二数据库和所述缓存中均查询不到所述第一数据的情况下,向终端设备发送用于表示更新成功的通知消息;
或者,在确定所述第一数据库和所述缓存中均查询到所述第二数据的情况下,向终端设备发送用于表示更新成功的通知消息;
或者,在确定所述第二数据库和所述缓存中均查询到第三数据的情况下,向终端设备发送用于表示更新成功的通知消息。
8.一种数据更新装置,其特征在于,包括:
第一更新模块,用于获取第一数据库的日志内容对应的更新标识,所述更新标识用于表示所述第一数据库的日志内容是否发生了更新;
获取模块,用于在确定所述更新标识指示所述第一数据库中的第一数据变更为第二数据的情况下,从所述第一数据库中获取所述第二数据,其中,所述第一数据和所述第二数据对应于同一数据标识;
第二更新模块,用于确定缓存中保存的第一数据,并将所述缓存中保存的第一数据更新为所述第二数据,其中,所述缓存与所述第一数据库已预先同步所述第一数据。
9.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至7任一项中所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至7任一项中所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211203452.0A CN115576966A (zh) | 2022-09-29 | 2022-09-29 | 数据更新方法、装置、存储介质及电子装置 |
PCT/CN2022/134785 WO2024066001A1 (zh) | 2022-09-29 | 2022-11-28 | 数据更新方法、装置、存储介质及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211203452.0A CN115576966A (zh) | 2022-09-29 | 2022-09-29 | 数据更新方法、装置、存储介质及电子装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115576966A true CN115576966A (zh) | 2023-01-06 |
Family
ID=84582789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211203452.0A Pending CN115576966A (zh) | 2022-09-29 | 2022-09-29 | 数据更新方法、装置、存储介质及电子装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115576966A (zh) |
WO (1) | WO2024066001A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10970266B2 (en) * | 2017-11-30 | 2021-04-06 | International Business Machines Corporation | Ensuring consistent replication of updates in databases |
CN108345627A (zh) * | 2017-12-19 | 2018-07-31 | 海尔优家智能科技(北京)有限公司 | 本地缓存数据更新的方法、装置、可读存储介质及设备 |
CN109871388A (zh) * | 2019-02-19 | 2019-06-11 | 北京字节跳动网络技术有限公司 | 数据缓存方法、装置、终电子设备及存储介质 |
CN113094378B (zh) * | 2021-03-19 | 2024-02-06 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备和存储介质 |
-
2022
- 2022-09-29 CN CN202211203452.0A patent/CN115576966A/zh active Pending
- 2022-11-28 WO PCT/CN2022/134785 patent/WO2024066001A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024066001A1 (zh) | 2024-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11397721B2 (en) | Merging conflict resolution for multi-master distributed databases | |
CN104715001B (zh) | 用于对数据处理系统的集群中的共享资源执行写入操作的方法和系统 | |
CN110096517B (zh) | 基于分布式系统的缓存数据的监控方法、装置和系统 | |
KR101871383B1 (ko) | 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 | |
US9367261B2 (en) | Computer system, data management method and data management program | |
CN111049928B (zh) | 数据同步方法、系统、电子设备及计算机可读存储介质 | |
US10726042B2 (en) | Replication control using eventually consistent meta-data | |
JP5686034B2 (ja) | クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
CN109522043B (zh) | 一种配置数据的管理方法、装置及存储介质 | |
CN111342986B (zh) | 分布式节点管理方法及装置、分布式系统、存储介质 | |
CN114625566A (zh) | 数据容灾方法、装置、电子设备及存储介质 | |
KR102567900B1 (ko) | 클라우드 저하 모드에서 지속적인 디바이스 동작 안정성을 보장하기 위한 방법 및 장치 | |
CN115004662A (zh) | 数据同步方法、装置、数据存储系统及计算机可读介质 | |
CN111309693A (zh) | 一种数据同步方法、装置、系统、电子设备及存储介质 | |
CN115576966A (zh) | 数据更新方法、装置、存储介质及电子装置 | |
CN115905255A (zh) | 一种缓存与数据库一致性的方法、存储介质及电子装置 | |
CN117827854A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN115048392A (zh) | 数据的删除方法和装置、存储介质及电子装置 | |
CN112711466B (zh) | 悬挂事务巡检方法和装置、电子设备和存储介质 | |
US10728323B2 (en) | Method and apparatus for operating infrastructure layer in cloud computing architecture | |
CN113783921A (zh) | 创建缓存组件的方法和装置 | |
CN113778975A (zh) | 基于分布式数据库的数据处理方法及装置 | |
CN115473809B (zh) | 一种基于微服务架构的配置处理方法、装置和存储介质 | |
CN117743348A (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 |