CN113626457A - 缓存删除重试机制实现数据库与缓存一致性方法及系统 - Google Patents
缓存删除重试机制实现数据库与缓存一致性方法及系统 Download PDFInfo
- Publication number
- CN113626457A CN113626457A CN202110955474.1A CN202110955474A CN113626457A CN 113626457 A CN113626457 A CN 113626457A CN 202110955474 A CN202110955474 A CN 202110955474A CN 113626457 A CN113626457 A CN 113626457A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- database
- user
- deletion
- 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
- 238000012217 deletion Methods 0.000 title claims abstract description 42
- 230000037430 deletion Effects 0.000 title claims abstract description 27
- 238000000034 method Methods 0.000 title claims abstract description 22
- 238000003780 insertion Methods 0.000 claims description 6
- 230000037431 insertion Effects 0.000 claims description 6
- 238000013515 script Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000001960 triggered effect Effects 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
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)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了缓存删除重试机制实现数据库与缓存一致性方法,所述方法包括以下步骤:步骤S1、接收数据库更新操作,写请求更新数据库;步骤S2、缓存数据出现问题,导致删除失败;步骤S3、将删除失败的key值放入消息队列中;步骤S4、订阅消息队列的消息,获取要删除的key值;步骤S5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性;本发明能够通过删除缓存重试的机制来确保缓存数据与数据库最终一致性。
Description
技术领域
本发明涉及计算机技术领域,特别是缓存删除重试机制实现数据库与缓存一致性方法及系统。
背景技术
在分布式系统中,可以理解为多个节点中数据的值是一致的。一般来说分为几种,具体如下:
(1)强一致性:它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大;
(2)弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态;
(3)最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。
业界在大型分布式系统的数据一致性上比较推崇最终一致性模型,因为实际上没办法做到数据库与缓存绝对的一致性,这是由CAP理论决定的。CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。但是,通过一些方案优化处理,是可以保证弱一致性或最终一致性的。一般常见的优化方案是:缓存延时双删,其步骤是先删除缓存,再更新数据库,休眠一会(比如1秒),再次删除缓存。这个方案需要休眠1秒,这1秒内可能出现脏数据,而且如果出现第二次删除缓存失败,还是会出现缓存和数据库的不一致问题。
发明内容
为克服上述问题,本发明的目的是提供一种能够通过删除缓存重试的机制来确保缓存数据与数据库最终一致性的方法。
本发明采用以下方案实现:缓存删除重试机制实现数据库与缓存一致性方法,所述方法包括以下步骤:
步骤S1、接收数据库更新操作,写请求更新数据库;
步骤S2、缓存数据出现问题,导致删除失败;
步骤S3、将删除失败的key值放入消息队列中;
步骤S4、订阅消息队列的消息,获取要删除的key值;
步骤S5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
进一步的,所述步骤S1进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
进一步的,所述步骤S2进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
进一步的,所述步骤S3进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
进一步的,所述步骤S4进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
进一步的,所述步骤S5进一步具体为:在系统中,通过对key-valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
本发明还提供了缓存删除重试机制实现数据库与缓存一致性系统,包括接收模块、错误模块、放入模块、订阅模块和操作模块,所述接收模块,即接收数据库更新操作,写请求更新数据库;所述错误模块,即缓存数据出现问题,导致删除失败;所述放入模块,即将删除失败的key值放入消息队列中;所述订阅模块,即订阅消息队列的消息,获取要删除的key值;所述操作模块,即重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
进一步的,所述接收模块进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
进一步的,所述错误模块进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
进一步的,所述放入模块进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
进一步的,所述订阅模块进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
进一步的,所述操作模块进一步具体为:在系统中,通过对key-valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
本发明的有益效果在于:本发明能够解决延时双删可能存在的第二步删除缓存失败的问题,利用删除缓存重试的机制确保缓存与数据库的最终一致性;能够尽可能地解决缓存与数据库的数据不一致问题,并在高并发的支付活动项目实践中取得较好的效果。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的系统原理框图。
图3为消息队列模型结构示意图。
图4为用户订阅消息队列模型的结构示意图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的缓存删除重试机制实现数据库与缓存一致性方法,所述方法包括以下步骤:
步骤S1、接收数据库更新操作,写请求更新数据库;
步骤S2、缓存数据出现问题,导致删除失败;
步骤S3、将删除失败的key值放入消息队列中;
步骤S4、订阅消息队列的消息,获取要删除的key值;
步骤S5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
下面通过一具体实施例对本发明作进一步说明:
步骤1:写请求更新数据库
---以上面商城积分系统为例,更新用户积分数据,就是一个写请求;具体分2个步骤:(1)用户产生消费获得积分,积分系统的积分管理模块(应用程序)收到这个累计积分的请求;(2)应用程序收到写请求后,通过数据库连接中间件取得与数据库的联系,并执行数据库插入或更新脚本(SQL语句),完成积分数据更新。
步骤2:缓存因为某些原因,删除失败;----比如网络异常,无法连接到缓存服务器;或者缓存服务器故障(宕机);应用程序出现BUG等。缓存是内存中少部分数据(如这边提到的用户积分数据)的复制品,存储于内存中,一般有设置一定的过期时间;跟步骤1的关系是写请求优先跟新数据库,如更新用户积分值,成功更新数据库后,会触发删除该用户在缓存中的旧数据,避免用户积分数据脏读。另外这边提到的缓存服务器,在中大型系统中,一般会部署内存数据库Redis服务器集群等来提供缓存服务。常见的缓存一般是key-value结构,如定义了一个key叫做user001point,它的积分值value为100,那这边的删除就是把这对key-value设置为过期或者移除该键值对,这样即使通过user001point这个key也查不到具体的值,需要重新去获取并插入缓存。
步骤3:把删除失败的key放到消息队列中
总的来说,消息队列是生产者先将消息投递一个叫做「队列」的容器中,然后再从这个容器中取出消息,最后再转发给消费者。具体可以看图3,这个是消息队列最原始的模型,它包含了两个关键词:消息和队列。1、消息:就是要传输的数据,可以是最简单的文本字符串,也可以是自定义的复杂格式(只要能按预定格式解析出来即可)。2、队列:是一种先进先出数据结构。它是存放消息的容器,消息从队尾入队,从队头出队,入队即发消息的过程,出队即收消息的过程。
如果需要将一份消息数据分发给多个消费者,并且每个消费者都要求收到全量的消息;为了解决这个问题,就演化出了另外一种消息模型:发布-订阅模型(图4),在发布-订阅模型中,存放消息的容器变成了“主题”,订阅者在接收消息之前需要先“订阅主题”。最终,每个订阅者都可以收到同一个主题的全量消息。
对比下它和“队列模式”的异同:生产者就是发布者,队列就是主题,消费者就是订阅者,无本质区别。唯一的不同点在于:一份消息数据是否可以被多次消费。
回到这个问题“如何将删除失败的key放入消息队列?”其实就是把key做为消息投递(发送)到队列中。
步骤4:订阅消费消息队列的消息,获取要删除的key
----这边的“应用程序”是一个统称,在与消息队列的交互中,它承担了2个角色“生产者”和“消费者”,即推送了key这个值的消息,又通过订阅的方式接收key(获取),以完成后续的重试删除缓存操作。
步骤5:重试删除缓存操作。
-应用具体场景说明:在商城积分系统中,为了提高相应速度,会把用户积分数据从数据库取出来并存储在缓存中,这样可以用户在个人中心可以较快地查询到自己的积分数据;但是积分值是会变化的,比如用户消费产生的新积分需要被及时地累加,这个时候需要用到该发明,以保证数据库和缓存的数据一致性。
总之,本发明总体的思路为了解决延时双删可能存在的第二步删除缓存失败的问题,利用删除缓存重试的机制确保缓存与数据库的最终一致性。
请参阅图2所示,本发明还提供了缓存删除重试机制实现数据库与缓存一致性系统,包括接收模块、错误模块、放入模块、订阅模块和操作模块,所述接收模块,即接收数据库更新操作,写请求更新数据库;所述错误模块,即缓存数据出现问题,导致删除失败;所述放入模块,即将删除失败的key值放入消息队列中;所述订阅模块,即订阅消息队列的消息,获取要删除的key值;所述操作模块,即重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
所述接收模块进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
所述错误模块进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
所述放入模块进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
所述订阅模块进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
所述操作模块进一步具体为:在系统中,通过对key-value结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (12)
1.缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述方法包括以下步骤:
步骤S1、接收数据库更新操作,写请求更新数据库;
步骤S2、缓存数据出现问题,导致删除失败;
步骤S3、将删除失败的key值放入消息队列中;
步骤S4、订阅消息队列的消息,获取要删除的key值;
步骤S5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
2.根据权利要求1所述的缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述步骤S1进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
3.根据权利要求1所述的缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述步骤S2进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
4.根据权利要求1所述的缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述步骤S3进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
5.根据权利要求1所述的缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述步骤S4进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
6.根据权利要求1所述的缓存删除重试机制实现数据库与缓存一致性方法,其特征在于:所述步骤S5进一步具体为:在系统中,通过对key-valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
7.缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:包括接收模块、错误模块、放入模块、订阅模块和操作模块,所述接收模块,即接收数据库更新操作,写请求更新数据库;所述错误模块,即缓存数据出现问题,导致删除失败;所述放入模块,即将删除失败的key值放入消息队列中;所述订阅模块,即订阅消息队列的消息,获取要删除的key值;所述操作模块,即重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
8.根据权利要求7所述的缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:所述接收模块进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
9.根据权利要求7所述的缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:所述错误模块进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
10.根据权利要求7所述的缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:所述放入模块进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
11.根据权利要求7所述的缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:所述订阅模块进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
12.根据权利要求7所述的缓存删除重试机制实现数据库与缓存一致性系统,其特征在于:所述操作模块进一步具体为:在系统中,通过对key-valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110955474.1A CN113626457A (zh) | 2021-08-19 | 2021-08-19 | 缓存删除重试机制实现数据库与缓存一致性方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110955474.1A CN113626457A (zh) | 2021-08-19 | 2021-08-19 | 缓存删除重试机制实现数据库与缓存一致性方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113626457A true CN113626457A (zh) | 2021-11-09 |
Family
ID=78386763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110955474.1A Pending CN113626457A (zh) | 2021-08-19 | 2021-08-19 | 缓存删除重试机制实现数据库与缓存一致性方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113626457A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242671A (zh) * | 2022-07-05 | 2022-10-25 | 中国电子科技集团公司第十四研究所 | 一种基于redis的消息监听方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040034640A1 (en) * | 2002-08-01 | 2004-02-19 | Oracle International Corporation | Buffered message queue architecture for database management systems with guaranteed at least once delivery |
CN111221828A (zh) * | 2018-11-26 | 2020-06-02 | 福建省华渔教育科技有限公司 | 一种提高数据库数据和缓存数据一致性的方法及终端 |
CN112487037A (zh) * | 2020-12-08 | 2021-03-12 | 平安国际智慧城市科技股份有限公司 | 缓存数据的处理方法、装置、计算机设备及存储介质 |
CN112749172A (zh) * | 2019-10-29 | 2021-05-04 | 深圳市茁壮网络股份有限公司 | 一种缓存与数据库之间的数据同步方法及系统 |
CN112822091A (zh) * | 2019-11-18 | 2021-05-18 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
-
2021
- 2021-08-19 CN CN202110955474.1A patent/CN113626457A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040034640A1 (en) * | 2002-08-01 | 2004-02-19 | Oracle International Corporation | Buffered message queue architecture for database management systems with guaranteed at least once delivery |
CN111221828A (zh) * | 2018-11-26 | 2020-06-02 | 福建省华渔教育科技有限公司 | 一种提高数据库数据和缓存数据一致性的方法及终端 |
CN112749172A (zh) * | 2019-10-29 | 2021-05-04 | 深圳市茁壮网络股份有限公司 | 一种缓存与数据库之间的数据同步方法及系统 |
CN112822091A (zh) * | 2019-11-18 | 2021-05-18 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
CN112487037A (zh) * | 2020-12-08 | 2021-03-12 | 平安国际智慧城市科技股份有限公司 | 缓存数据的处理方法、装置、计算机设备及存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242671A (zh) * | 2022-07-05 | 2022-10-25 | 中国电子科技集团公司第十四研究所 | 一种基于redis的消息监听方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10944807B2 (en) | Organizing present and future reads from a tiered streaming data storage layer | |
US10831614B2 (en) | Visualizing restoration operation granularity for a database | |
CN101686209B (zh) | 消息转发系统中存储消息的方法和装置 | |
US7783607B2 (en) | Decentralized record expiry | |
CN112084258A (zh) | 一种数据同步方法和装置 | |
CN103092905B (zh) | 使用虚拟文件数据对象的列式数据库 | |
CN105493474B (zh) | 用于支持用于同步分布式数据网格中的数据的分区级别日志的系统及方法 | |
CN101650741B (zh) | 一种分布式全文检索的索引实时更新的方法和系统 | |
CN101964820B (zh) | 一种保持数据一致性的方法及系统 | |
CN111563102A (zh) | 缓存更新方法、服务器、系统及存储介质 | |
CN106953901A (zh) | 一种提高消息传递性能的集群通信系统及其方法 | |
CN105808643A (zh) | 一种Redis内存数据库刷新的方法 | |
CN104794119B (zh) | 用于中间件消息的存储与传输方法及系统 | |
US11269684B1 (en) | Distributed streaming system supporting real-time sliding windows | |
CN113438275B (zh) | 数据迁移方法、装置、存储介质及数据迁移设备 | |
CN112612799B (zh) | 一种数据同步方法及终端 | |
US7908514B2 (en) | Minimizing data loss in asynchronous replication solution using distributed redundancy | |
US20180121531A1 (en) | Data Updating Method, Device, and Related System | |
CN111159176A (zh) | 一种海量流数据的存储和读取的方法和系统 | |
CN103501319A (zh) | 一种低延迟的面向小文件的分布式存储系统 | |
CN112463073A (zh) | 一种对象存储分布式配额方法、系统、设备和存储介质 | |
CN112334891A (zh) | 用于搜索服务器的集中式存储 | |
CN113626457A (zh) | 缓存删除重试机制实现数据库与缓存一致性方法及系统 | |
CN114896215A (zh) | 元数据的存储方法及装置 | |
CN107885824A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20211109 |