CN112749172A - 一种缓存与数据库之间的数据同步方法及系统 - Google Patents

一种缓存与数据库之间的数据同步方法及系统 Download PDF

Info

Publication number
CN112749172A
CN112749172A CN201911039188.XA CN201911039188A CN112749172A CN 112749172 A CN112749172 A CN 112749172A CN 201911039188 A CN201911039188 A CN 201911039188A CN 112749172 A CN112749172 A CN 112749172A
Authority
CN
China
Prior art keywords
target data
service
cache
database
application service
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
Application number
CN201911039188.XA
Other languages
English (en)
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.)
Shenzhen Ipanel TV Inc
Original Assignee
Shenzhen Ipanel TV Inc
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 Shenzhen Ipanel TV Inc filed Critical Shenzhen Ipanel TV Inc
Priority to CN201911039188.XA priority Critical patent/CN112749172A/zh
Publication of CN112749172A publication Critical patent/CN112749172A/zh
Pending legal-status Critical Current

Links

Images

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/23Updating
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

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

Abstract

本发明提供了一种缓存与数据库之间的数据同步方法及系统,数据同步系统包括应用服务、RabbitMQ中间件、缓存和数据库,应用服务对数据库中的目标数据进行更新;应用服务删除缓存中的所述目标数据;RabbitMQ中间件在接收应用服务发送的缓存删除失败信息的情况下,触发应用服务再次删除所述缓存中的所述目标数据,直到缓存中所述目标数据删除成功,在先更新数据再删除缓存的策略中,保证缓存与数据库之间数据一致性。

Description

一种缓存与数据库之间的数据同步方法及系统
技术领域
本发明涉及数据库技术领域,更具体的,涉及一种缓存与数据库之间的数据同步方法及系统。
背景技术
在数据库技术领域,为了降低数据库的负载压力,提高对用户的响应效率,一般将数据库的数据同步到缓存中,用户可以通过访问缓存获取相应数据。在数据更新时如何保证数据库与缓存的一致性成为本领域亟待解决的技术问题。
现有技术中,在先更新数据库再删除缓存的策略中,如果缓存删除失败,此时程序认为缓存中存在数据,用户将会从缓存中获取返回数据,由于数据库数据已经更新,则此时用户获取的数据与数据库中的数据不一致,即导致导致数据库与缓存不一致。
发明内容
有鉴于此,本发明提供了一种缓存与数据库之间的数据同步方法,在先更新数据再删除缓存的策略中,保证缓存与数据库之间数据一致性。
为了实现上述发明目的,本发明提供的具体技术方案如下:
一种缓存与数据库之间的数据同步方法,应用于缓存与数据库之间的数据同步系统,所述数据同步系统包括应用服务、RabbitMQ中间件、缓存和数据库,所述方法包括:
所述应用服务对所述数据库中的目标数据进行更新;
所述应用服务删除所述缓存中的所述目标数据;
所述RabbitMQ中间件在接收所述应用服务发送的缓存删除失败信息的情况下,触发所述应用服务再次删除所述缓存中的所述目标数据,直到所述缓存中所述目标数据删除成功。
可选的,所述应用服务包括业务代码子服务和非业务代码子服务;
所述应用服务对所述数据库中的目标数据进行更新,具体为:
所述业务代码子服务对所述数据库中的目标数据进行更新;
所述应用服务删除所述缓存中的所述目标数据,具体为:
所述非业务代码子服务获取所述业务代码子服务在所述数据库中更新的所述目标数据,并删除所述缓存中的所述目标数据。
可选的,所述数据同步系统还包括Kafka消息队列,在所述业务代码子服务对所述数据库中的所述目标数据进行更新之后,所述方法还包括:
所述数据库将所述目标数据写入binlog日志中;
所述Kafka消息队列订阅所述binlog日志中的所述目标数据;
所述非业务代码子服务获取所述业务代码子服务在所述数据库中更新的所述目标数据,包括:
所述非业务代码子服务通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,在所述第一应用服务对所述主库中的所述目标数据进行更新之后,所述方法还包括:
所述第一应用服务在所述缓存设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第二应用服务读取所述缓存中所述目标数据的所述更新标记;
若所述缓存中所述目标数据的所述更新标记未过期,所述第二应用服务读取所述主库中的所述目标数据;
若所述缓存中所述目标数据的所述更新标记已过期,所述第二应用服务器读取所述从库中的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,在所述第一应用服务对所述主库中的所述目标数据进行更新之后,所述方法还包括:
所述第一应用服务器在本地客户端设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
若本地客户端中所述目标数据的所述更新标记未过期,所述第一应用服务器读取所述主库中的所述目标数据;
若本地客户端中所述目标数据的所述更新标记已过期,所述第一应用服务器读取所述从库中的所述目标数据。
可选的,在所述非业务代码子服务删除所述缓存中的所述目标数据之前,所述方法还包括:
所述非业务代码子服务向所述RabbitMQ中间件发送一个延迟消息,所述延期消息的延迟时间与所述更新标记的过期时间相同;
所述RabbitMQ中间件在接收所述延迟消息时,触发所述非业务代码子服务删除所述缓存中的所述目标数据。
一种缓存与数据库之间的数据同步系统,包括应用服务、RabbitMQ中间件、缓存和数据库;
所述应用服务,用于对所述数据库中的目标数据进行更新,并删除所述缓存中的所述目标数据;
所述RabbitMQ中间件,用于在接收所述应用服务发送的缓存删除失败信息的情况下,触发所述应用服务再次删除所述缓存中的所述目标数据,直到所述缓存中所述目标数据删除成功。
可选的,所述应用服务包括业务代码子服务和非业务代码子服务;
所述业务代码子服务,用于对所述数据库中的目标数据进行更新;
所述非业务代码子服务,用于获取所述业务代码子服务在所述数据库中更新的所述目标数据,并删除所述缓存中的所述目标数据。
可选的,所述系统还包括Kafka消息队列;
所述数据库,用于将所述目标数据写入binlog日志中;
所述Kafka消息队列,用于订阅所述binlog日志中的所述目标数据;
所述非业务代码子服务,具体用于通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在所述缓存设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第二应用服务,用于读取所述缓存中所述目标数据的所述更新标记,若所述缓存中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若所述缓存中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在本地客户端设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第一应用服务器,还用于若本地客户端中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若本地客户端中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
可选的,所述所述非业务代码子服务,还用于在删除所述缓存中的所述目标数据之前,向所述RabbitMQ中间件发送一个延迟消息,所述延期消息的延迟时间与所述更新标记的过期时间相同;
所述RabbitMQ中间件,还用于在接收所述延迟消息时,触发所述非业务代码子服务删除所述缓存中的所述目标数据。
相对于现有技术,本发明的有益效果如下:
本发明公开的缓存与数据库之间的数据同步方法,在先更新数据再删除缓存的策略中,应用服务先对数据库中的目标数据进行更新,然后删除缓存中的所述目标数据,通过RabbitMQ中间件在接收应用服务发送的缓存删除失败信息的情况下,触发应用服务再次删除所述缓存中的所述目标数据,直到缓存中所述目标数据删除成功,保证缓存与数据库之间数据一致性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种缓存与数据库之间的数据同步方法的流程示意图;
图2为本发明实施例公开的另一种缓存与数据库之间的数据同步方法的流程示意图;
图3为本发明实施例公开的另一种缓存与数据库之间的数据同步方法的流程示意图;
图4为本发明实施例公开的另一种缓存与数据库之间的数据同步方法的流程示意图;
图5为本发明实施例公开的另一种缓存与数据库之间的数据同步方法的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人通过研究发现:根据数据库与缓存的更新先后顺序可有如下四种数据同步情况:
一、先更新数据库,再更新缓存
这种情况下数据同步的流程如下:
1)请求A先发起,更新数据库为99,但还没有来得及更新缓存;
2)请求B发起,更新数据库为98,又更新了缓存值为98;
3)请求A这时才更新缓存的值为99。
此时数据库的值是98,但缓存的值是99,数据库与缓存的数值不一致。
二、先更新缓存,再更新数据库
这种情况下数据同步的流程如下:
1)请求A先更新缓存为99,但还没有来得及更新数据库;
2)请求B更新缓存为98,又更新了数据库为98;
3)请求A这时更新数据库为99。
这样就缓存的值为98,数据库为99,数据库与缓存的数据不一致。
三、先删除缓存,再更新数据库
这种情况下数据同步的流程如下:
1)请求A更新值,先把缓存中的值删除,但还没有来得及更新数据库;
2)此时请求B过来查询此值,发现缓存中不存在,就到数据库中查询;
3)请求B在数据库中获取到值,在把值设置到缓存中;
4)请求A这时才更新数据库里面的值为99。
这样就导致了缓存和数据库的不一致问题,缓存中的值一直是旧数据,数据库与缓存的数据不一致。
四、先更新数据库,再删除缓存
这种情况下数据同步的流程如下:
1)请求A发起查询请求,直接到数据库查询到100,但还没有来得及去设置缓存;
2)请求B更新值,先更新数据库,在删除缓存;
3)请求A这时才设置缓存为100。
这种情况发生的不一致,是因为缓存突然失效了。而且还要保证请求B更新操作比请求A的查询操作还要快;才会导致不一致。这种情况概率会很少。一般要求不高的项目可以采用此方式。
可见,缓存与数据库的四种数据同步方法都会存在一定的问题、只有第四种方法:先更新数据库,再删除缓存。这种方法保证了数据的源头即数据库中的数据一定是正确的并且最新的,缓存中的数据会存在一定的滞后、一般的业务场景下应用都是没有问题的。但是,在先更新数据库,再删除缓存的策略中,因为要删除缓存,但如果缓存删除失败,就会导致数据库与缓存不一致。
为了解决上述技术问题,本发明实施例公开了一种缓存与数据库之间的数据同步方法,应用于缓存与数据库之间的数据同步系统,该系统包括应用服务、RabbitMQ中间件、缓存和数据库,请参阅图1,该数据同步方法具体包括以下步骤:
S101:应用服务对数据库中的目标数据进行更新
S102:应用服务删除缓存中的所述目标数据
S103:RabbitMQ中间件在接收应用服务发送的缓存删除失败信息的情况下,触发应用服务再次删除缓存中的所述目标数据,直到缓存中所述目标数据删除成功。
可见,本实施例公开的缓存与数据库之间的数据同步方法,在先更新数据再删除缓存的策略中,应用服务先对数据库中的目标数据进行更新,然后删除缓存中的所述目标数据,通过RabbitMQ中间件在接收应用服务发送的缓存删除失败信息的情况下,触发应用服务再次删除所述缓存中的所述目标数据,直到缓存中所述目标数据删除成功,保证缓存与数据库之间数据一致性。
为了避免应用服务的业务代码过度耦合导致业务代码不清晰的问题,请参阅图2,本实施例公开了另一种缓存与数据库之间的数据同步方法,应用于缓存与数据库之间的数据同步系统,所述数据同步系统包括应用服务、RabbitMQ中间件、缓存、数据库和Kafka消息队列,其中,应用服务包括业务代码子服务和非业务代码子服务,具体的,请参阅图2,本实施公开的缓存与数据库之间的数据同步方法包括以下步骤:
S201:业务代码子服务对数据库中的目标数据进行更新;
S202:数据库将所述目标数据写入binlog日志中;
S203:Kafka消息队列订阅所述binlog日志中的所述目标数据;
S204:非业务代码子服务通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据;
S205:RabbitMQ中间件在接收应用服务发送的缓存删除失败信息的情况下,触发应用服务再次删除缓存中的所述目标数据,直到缓存中所述目标数据删除成功。
本实施例公开的缓存与数据库之间的数据同步方法,由于非业务代码子服务不需要和业务关联,因此,非业务代码子服务删除缓存是独立的,避免了应用服务的业务代码过度耦合导致业务代码不清晰的问题。同时本实施例利用Kafka消息队列来进行发布订阅消息,可以处理消费者规模的网站中的所有动作流数据。应用程序利用第三方的日志后台机制发送请求,而不需要扩展业务系统,解决了业务系统与消息机制的耦合性。
发明人通过研究发现:一般中大型项目都会用到数据库的读写分离,以提高系统的吞吐量,一个主库负责写请求,更新数据,一个或一个以上从库负责读请求,主库和从库之间同步数据。但是由于主库与从库之间的数据同步会有一定时间的延迟,会导致主库与从库之间数据不一致的问题。如写请求A进行数据更新,但主库还没有来得及把更新的数据更新到从库,此时读请求B进行数据查询,请求B是访问的从库,获取的是旧值,并不是主库已更新的值。
为了解决上述技术问题,本实施例公开了另一种缓存与数据库之间的数据同步方法,应用于缓存与数据库之间的数据同步系统,所述数据同步系统包括应用服务、RabbitMQ中间件、缓存、数据库和Kafka消息队列,数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,请参阅图3,具体包括以下步骤:
S301:第一应用服务对主库中的目标数据进行更新;
S302:第一应用服务在缓存设置更新标记,更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间;
S303:第二应用服务读取缓存中目标数据的更新标记;
S304:第二应用服务在缓存中目标数据的更新标记未过期的情况下,读取主库中的目标数据;
S305:第二应用服务在缓存中目标数据的更新标记已过期的情况下,读取从库中的目标数据。
可见,在每次的读请求都要到缓存中判断目标数据的更新标记是否过期,在更新标记未过期的情况下,读取主库中的目标数据,在更新标记已过期的情况下,读取从库中的目标数据,保证每次读取目标数据读取的都是最新的数据。
当采用集群部署缓存,如采用Redis,则每次读要求都要和Redis进行交互,在一定程度上会影响系统吞吐量,而在真实业务中,有一类业务可以接受主库和从库短时间内的数据不一致,但是又不影响到整个系统的负载机复杂度,如作者写文章,然后更新到文章列表,作者用户是能够看到更新的,其他用户暂时看不到是没有关系的。在此基础上,本实施例公开了另一种缓存与数据库之间的数据同步方法,应用于缓存与数据库之间的数据同步系统,所述数据同步系统包括应用服务、RabbitMQ中间件、缓存、数据库和Kafka消息队列,数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,请参阅图4,具体包括以下步骤:
S401:第一应用服务对主库中的目标数据进行更新;
S402:第一应用服务在本地客户端设置更新标记,更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间;
S403:第一应用服务读取本地客户端中目标数据的更新标记;
S404:第一应用服务在本地客户端中目标数据的更新标记未过期的情况下,读取主库中的目标数据;
S405:第一应用服务在本地客户端中目标数据的更新标记已过期的情况下,读取从库中的目标数据。
本实施例公开的缓存与数据库之间的数据同步方法,保证第一应用服务读取的数据一定是最新数据,且没有性能问题,第二应用服务由于无法看到目标数据的更新标记,则读取从库中的数据。
为了使第二应用服务能够读取更新后的目标数据,可以通过后台更新机制,具体的,请参阅图5:
S501:业务代码子服务对数据库中的目标数据进行更新;
S502:数据库将所述目标数据写入binlog日志中;
S503:Kafka消息队列订阅所述binlog日志中的所述目标数据;
S504:非业务代码子服务通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据;
S505:非业务代码子服务向RabbitMQ中间件发送一个延迟消息,延期消息的延迟时间与目标数据的更新标记的过期时间相同;
S506:RabbitMQ中间件在接收延迟消息时,触发非业务代码子服务删除缓存中的所述目标数据。
在本实施的技术方案中,第二应用服务用户的读请求会有短暂时间读取到的是旧值,那么如何缩短时间从而尽快让其它用户尽快获取到最新值。可以让第一应用服务用户再次发起读请求,读取本地客户端中目标数据的更新标记,读取主库中的目标数据,此时读取的肯定是新值,第二应用服务再把这个新值设置到缓存中。这样就保证了缓存中的是新值,虽然从库还没有不同完成,但缓存中已经是新值了最后从库同步数据完成,值就达到了一致性。
可见,本发明提供的缓存与数据库之间的数据同步方法,在先更新数据再删除缓存的策略中,保证了缓存失败的情况下缓存与数据库之间的数据一致,以及在读写分离中主库与从库的数据一致。
基于上述实施例公开的一种缓存与数据库之间的数据同步方法,本实施例对应公开了一种缓存与数据库之间的数据同步系统,包括应用服务、RabbitMQ中间件、缓存和数据库;
所述应用服务,用于对所述数据库中的目标数据进行更新,并删除所述缓存中的所述目标数据;
所述RabbitMQ中间件,用于在接收所述应用服务发送的缓存删除失败信息的情况下,触发所述应用服务再次删除所述缓存中的所述目标数据,直到所述缓存中所述目标数据删除成功。
可选的,所述应用服务包括业务代码子服务和非业务代码子服务;
所述业务代码子服务,用于对所述数据库中的目标数据进行更新;
所述非业务代码子服务,用于获取所述业务代码子服务在所述数据库中更新的所述目标数据,并删除所述缓存中的所述目标数据。
可选的,所述系统还包括Kafka消息队列;
所述数据库,用于将所述目标数据写入binlog日志中;
所述Kafka消息队列,用于订阅所述binlog日志中的所述目标数据;
所述非业务代码子服务,具体用于通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在所述缓存设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第二应用服务,用于读取所述缓存中所述目标数据的所述更新标记,若所述缓存中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若所述缓存中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
可选的,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在本地客户端设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第一应用服务器,还用于若本地客户端中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若本地客户端中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
可选的,所述所述非业务代码子服务,还用于在删除所述缓存中的所述目标数据之前,向所述RabbitMQ中间件发送一个延迟消息,所述延期消息的延迟时间与所述更新标记的过期时间相同;
所述RabbitMQ中间件,还用于在接收所述延迟消息时,触发所述非业务代码子服务删除所述缓存中的所述目标数据。
本发明提供的缓存与数据库之间的数据同步系统,在先更新数据再删除缓存的策略中,保证了缓存失败的情况下缓存与数据库之间的数据一致,以及在读写分离中主库与从库的数据一致。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (12)

1.一种缓存与数据库之间的数据同步方法,其特征在于,应用于缓存与数据库之间的数据同步系统,所述数据同步系统包括应用服务、RabbitMQ中间件、缓存和数据库,所述方法包括:
所述应用服务对所述数据库中的目标数据进行更新;
所述应用服务删除所述缓存中的所述目标数据;
所述RabbitMQ中间件在接收所述应用服务发送的缓存删除失败信息的情况下,触发所述应用服务再次删除所述缓存中的所述目标数据,直到所述缓存中所述目标数据删除成功。
2.根据权利要求1所述的方法,其特征在于,所述应用服务包括业务代码子服务和非业务代码子服务;
所述应用服务对所述数据库中的目标数据进行更新,具体为:
所述业务代码子服务对所述数据库中的目标数据进行更新;
所述应用服务删除所述缓存中的所述目标数据,具体为:
所述非业务代码子服务获取所述业务代码子服务在所述数据库中更新的所述目标数据,并删除所述缓存中的所述目标数据。
3.根据权利要求2所述的方法,其特征在于,所述数据同步系统还包括Kafka消息队列,在所述业务代码子服务对所述数据库中的所述目标数据进行更新之后,所述方法还包括:
所述数据库将所述目标数据写入binlog日志中;
所述Kafka消息队列订阅所述binlog日志中的所述目标数据;
所述非业务代码子服务获取所述业务代码子服务在所述数据库中更新的所述目标数据,包括:
所述非业务代码子服务通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据。
4.根据权利要求3所述的方法,其特征在于,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,在所述第一应用服务对所述主库中的所述目标数据进行更新之后,所述方法还包括:
所述第一应用服务在所述缓存设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第二应用服务读取所述缓存中所述目标数据的所述更新标记;
若所述缓存中所述目标数据的所述更新标记未过期,所述第二应用服务读取所述主库中的所述目标数据;
若所述缓存中所述目标数据的所述更新标记已过期,所述第二应用服务器读取所述从库中的所述目标数据。
5.根据权利要求3所述的方法,其特征在于,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务,在所述第一应用服务对所述主库中的所述目标数据进行更新之后,所述方法还包括:
所述第一应用服务器在本地客户端设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
若本地客户端中所述目标数据的所述更新标记未过期,所述第一应用服务器读取所述主库中的所述目标数据;
若本地客户端中所述目标数据的所述更新标记已过期,所述第一应用服务器读取所述从库中的所述目标数据。
6.根据权利要求4或5所述的方法,其特征在于,在所述非业务代码子服务删除所述缓存中的所述目标数据之前,所述方法还包括:
所述非业务代码子服务向所述RabbitMQ中间件发送一个延迟消息,所述延期消息的延迟时间与所述更新标记的过期时间相同;
所述RabbitMQ中间件在接收所述延迟消息时,触发所述非业务代码子服务删除所述缓存中的所述目标数据。
7.一种缓存与数据库之间的数据同步系统,其特征在于,包括应用服务、RabbitMQ中间件、缓存和数据库;
所述应用服务,用于对所述数据库中的目标数据进行更新,并删除所述缓存中的所述目标数据;
所述RabbitMQ中间件,用于在接收所述应用服务发送的缓存删除失败信息的情况下,触发所述应用服务再次删除所述缓存中的所述目标数据,直到所述缓存中所述目标数据删除成功。
8.根据权利要求7所述的系统,其特征在于,所述应用服务包括业务代码子服务和非业务代码子服务;
所述业务代码子服务,用于对所述数据库中的目标数据进行更新;
所述非业务代码子服务,用于获取所述业务代码子服务在所述数据库中更新的所述目标数据,并删除所述缓存中的所述目标数据。
9.根据权利要求8所述的系统,其特征在于,所述系统还包括Kafka消息队列;
所述数据库,用于将所述目标数据写入binlog日志中;
所述Kafka消息队列,用于订阅所述binlog日志中的所述目标数据;
所述非业务代码子服务,具体用于通过读取所述Kafka消息队列,获取所述业务代码子服务在所述数据库中更新的所述目标数据。
10.根据权利要求9所述的系统,其特征在于,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在所述缓存设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第二应用服务,用于读取所述缓存中所述目标数据的所述更新标记,若所述缓存中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若所述缓存中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
11.根据权利要求9所述的系统,其特征在于,所述数据库包括主库和至少一个从库,所述应用服务包括第一应用服务和第二应用服务;
所述第一应用服务,用于在对所述主库中的所述目标数据进行更新之后,在本地客户端设置更新标记,所述更新标记包括业务代号、数据库标识、表标识、主键标识和过期时间,所述主库与所述从库在所述过期时间内实现对所述目标数据的同步更新;
所述第一应用服务器,还用于若本地客户端中所述目标数据的所述更新标记未过期,读取所述主库中的所述目标数据;若本地客户端中所述目标数据的所述更新标记已过期,读取所述从库中的所述目标数据。
12.根据权利要求10或11所述的系统,其特征在于,所述所述非业务代码子服务,还用于在删除所述缓存中的所述目标数据之前,向所述RabbitMQ中间件发送一个延迟消息,所述延期消息的延迟时间与所述更新标记的过期时间相同;
所述RabbitMQ中间件,还用于在接收所述延迟消息时,触发所述非业务代码子服务删除所述缓存中的所述目标数据。
CN201911039188.XA 2019-10-29 2019-10-29 一种缓存与数据库之间的数据同步方法及系统 Pending CN112749172A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911039188.XA CN112749172A (zh) 2019-10-29 2019-10-29 一种缓存与数据库之间的数据同步方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911039188.XA CN112749172A (zh) 2019-10-29 2019-10-29 一种缓存与数据库之间的数据同步方法及系统

Publications (1)

Publication Number Publication Date
CN112749172A true CN112749172A (zh) 2021-05-04

Family

ID=75640151

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911039188.XA Pending CN112749172A (zh) 2019-10-29 2019-10-29 一种缓存与数据库之间的数据同步方法及系统

Country Status (1)

Country Link
CN (1) CN112749172A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434525A (zh) * 2021-06-24 2021-09-24 青岛海尔科技有限公司 缓存数据的更新方法和装置、存储介质及电子装置
CN113626457A (zh) * 2021-08-19 2021-11-09 福建天晴数码有限公司 缓存删除重试机制实现数据库与缓存一致性方法及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434525A (zh) * 2021-06-24 2021-09-24 青岛海尔科技有限公司 缓存数据的更新方法和装置、存储介质及电子装置
CN113434525B (zh) * 2021-06-24 2023-06-09 青岛海尔科技有限公司 缓存数据的更新方法和装置、存储介质及电子装置
CN113626457A (zh) * 2021-08-19 2021-11-09 福建天晴数码有限公司 缓存删除重试机制实现数据库与缓存一致性方法及系统

Similar Documents

Publication Publication Date Title
JP4732661B2 (ja) クライアントのデータベースとサーバーのデータベースとを同期させる方法
CN101064630B (zh) 一种数据同步方法及系统
WO2020063763A1 (zh) 数据存储方法、装置、系统、服务器、控制节点及介质
US20100030818A1 (en) System and method for applying once a transaction delivered in a message published asynchronously in a distributed database
CN111221469B (zh) 同步缓存数据的方法、装置和系统
CN110413650B (zh) 一种业务数据的处理方法、装置、设备和存储介质
CN112084258A (zh) 一种数据同步方法和装置
CN110912980B (zh) 订单状态同步方法、系统及存储介质
CN112367149B (zh) 消息获取方法、装置、设备及存储介质
CN101526958B (zh) 一种iptv系统模块间数据同步的方法及系统
CN105095489A (zh) 一种分布式文件删除方法、装置和系统
US10664349B2 (en) Method and device for file storage
CN113010549A (zh) 基于异地多活系统的数据处理方法、相关设备及存储介质
CN112698926B (zh) 数据处理方法、装置、设备、存储介质及系统
CN107025257B (zh) 一种事务处理方法及装置
CN112749172A (zh) 一种缓存与数据库之间的数据同步方法及系统
CN112822091A (zh) 一种消息处理方法和装置
CN114328749A (zh) 业务数据处理方法及其装置、计算机可读存储介质
CN114185991A (zh) 基于分布式数据库实现数据同步的方法及相关装置
CN111182014B (zh) 一种数据同步方法和装置
CN107526530B (zh) 数据处理方法和设备
CN111711639B (zh) 终端、数据传输方法、系统、和计算机可读存储介质
CN113872994B (zh) 组织架构同步方法、装置、计算机设备和存储介质
CN113760519B (zh) 分布式事务处理方法、装置、系统和电子设备
CN116737764A (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