一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

缓存删除重试机制实现数据库与缓存一致性方法及系统与流程

2021-11-09 23:14:00 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,特别是缓存删除重试机制实现数据库与缓存一致性方法及系统。


背景技术:

2.在分布式系统中,可以理解为多个节点中数据的值是一致的。一般来说分为几种,具体如下:
3.(1)强一致性:它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大;
4.(2)弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态;
5.(3)最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。
6.业界在大型分布式系统的数据一致性上比较推崇最终一致性模型,因为实际上没办法做到数据库与缓存绝对的一致性,这是由cap理论决定的。cap理论,指的是在一个分布式系统中,consistency(一致性)、availability(可用性)、partition tolerance(分区容错性),三者不可得兼。但是,通过一些方案优化处理,是可以保证弱一致性或最终一致性的。一般常见的优化方案是:缓存延时双删,其步骤是先删除缓存,再更新数据库,休眠一会(比如1秒),再次删除缓存。这个方案需要休眠1秒,这1秒内可能出现脏数据,而且如果出现第二次删除缓存失败,还是会出现缓存和数据库的不一致问题。


技术实现要素:

7.为克服上述问题,本发明的目的是提供一种能够通过删除缓存重试的机制来确保缓存数据与数据库最终一致性的方法。
8.本发明采用以下方案实现:缓存删除重试机制实现数据库与缓存一致性方法,所述方法包括以下步骤:
9.步骤s1、接收数据库更新操作,写请求更新数据库;
10.步骤s2、缓存数据出现问题,导致删除失败;
11.步骤s3、将删除失败的key值放入消息队列中;
12.步骤s4、订阅消息队列的消息,获取要删除的key值;
13.步骤s5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
14.进一步的,所述步骤s1进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
15.进一步的,所述步骤s2进一步具体为:在用户更新数据后,发生网络异常、缓存服
务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
16.进一步的,所述步骤s3进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
17.进一步的,所述步骤s4进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
18.进一步的,所述步骤s5进一步具体为:在系统中,通过对key

valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
19.本发明还提供了缓存删除重试机制实现数据库与缓存一致性系统,包括接收模块、错误模块、放入模块、订阅模块和操作模块,所述接收模块,即接收数据库更新操作,写请求更新数据库;所述错误模块,即缓存数据出现问题,导致删除失败;所述放入模块,即将删除失败的key值放入消息队列中;所述订阅模块,即订阅消息队列的消息,获取要删除的key值;所述操作模块,即重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
20.进一步的,所述接收模块进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
21.进一步的,所述错误模块进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
22.进一步的,所述放入模块进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
23.进一步的,所述订阅模块进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
24.进一步的,所述操作模块进一步具体为:在系统中,通过对key

valu结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
25.本发明的有益效果在于:本发明能够解决延时双删可能存在的第二步删除缓存失败的问题,利用删除缓存重试的机制确保缓存与数据库的最终一致性;能够尽可能地解决缓存与数据库的数据不一致问题,并在高并发的支付活动项目实践中取得较好的效果。
附图说明
26.图1是本发明的方法流程示意图。
27.图2是本发明的系统原理框图。
28.图3为消息队列模型结构示意图。
29.图4为用户订阅消息队列模型的结构示意图。
具体实施方式
30.下面结合附图对本发明做进一步说明。
31.请参阅图1所示,本发明的缓存删除重试机制实现数据库与缓存一致性方法,所述方法包括以下步骤:
32.步骤s1、接收数据库更新操作,写请求更新数据库;
33.步骤s2、缓存数据出现问题,导致删除失败;
34.步骤s3、将删除失败的key值放入消息队列中;
35.步骤s4、订阅消息队列的消息,获取要删除的key值;
36.步骤s5、重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
37.下面通过一具体实施例对本发明作进一步说明:
38.步骤1:写请求更新数据库
39.‑‑‑
以上面商城积分系统为例,更新用户积分数据,就是一个写请求;具体分2个步骤:(1)用户产生消费获得积分,积分系统的积分管理模块(应用程序)收到这个累计积分的请求;(2)应用程序收到写请求后,通过数据库连接中间件取得与数据库的联系,并执行数据库插入或更新脚本(sql语句),完成积分数据更新。
40.步骤2:缓存因为某些原因,删除失败;
‑‑‑‑
比如网络异常,无法连接到缓存服务器;或者缓存服务器故障(宕机);应用程序出现bug等。缓存是内存中少部分数据(如这边提到的用户积分数据)的复制品,存储于内存中,一般有设置一定的过期时间;跟步骤1的关系是写请求优先跟新数据库,如更新用户积分值,成功更新数据库后,会触发删除该用户在缓存中的旧数据,避免用户积分数据脏读。另外这边提到的缓存服务器,在中大型系统中,一般会部署内存数据库redis服务器集群等来提供缓存服务。常见的缓存一般是key

value结构,如定义了一个key叫做user001point,它的积分值value为100,那这边的删除就是把这对key

value设置为过期或者移除该键值对,这样即使通过user001point这个key也查不到具体的值,需要重新去获取并插入缓存。
41.步骤3:把删除失败的key放到消息队列中
42.总的来说,消息队列是生产者先将消息投递一个叫做「队列」的容器中,然后再从这个容器中取出消息,最后再转发给消费者。具体可以看图3,这个是消息队列最原始的模型,它包含了两个关键词:消息和队列。1、消息:就是要传输的数据,可以是最简单的文本字符串,也可以是自定义的复杂格式(只要能按预定格式解析出来即可)。2、队列:是一种先进先出数据结构。它是存放消息的容器,消息从队尾入队,从队头出队,入队即发消息的过程,出队即收消息的过程。
43.如果需要将一份消息数据分发给多个消费者,并且每个消费者都要求收到全量的消息;为了解决这个问题,就演化出了另外一种消息模型:发布

订阅模型(图4),在发布

订阅模型中,存放消息的容器变成了“主题”,订阅者在接收消息之前需要先“订阅主题”。最终,每个订阅者都可以收到同一个主题的全量消息。
44.对比下它和“队列模式”的异同:生产者就是发布者,队列就是主题,消费者就是订阅者,无本质区别。唯一的不同点在于:一份消息数据是否可以被多次消费。
45.回到这个问题“如何将删除失败的key放入消息队列?”其实就是把key做为消息投递(发送)到队列中。
46.步骤4:订阅消费消息队列的消息,获取要删除的key
47.‑‑‑‑
这边的“应用程序”是一个统称,在与消息队列的交互中,它承担了2个角色

生产者”和“消费者”,即推送了key这个值的消息,又通过订阅的方式接收key(获取),以完成后续的重试删除缓存操作。
48.步骤5:重试删除缓存操作。
49.‑
应用具体场景说明:在商城积分系统中,为了提高相应速度,会把用户积分数据从数据库取出来并存储在缓存中,这样可以用户在个人中心可以较快地查询到自己的积分数据;但是积分值是会变化的,比如用户消费产生的新积分需要被及时地累加,这个时候需要用到该发明,以保证数据库和缓存的数据一致性。
50.总之,本发明总体的思路为了解决延时双删可能存在的第二步删除缓存失败的问题,利用删除缓存重试的机制确保缓存与数据库的最终一致性。
51.请参阅图2所示,本发明还提供了缓存删除重试机制实现数据库与缓存一致性系统,包括接收模块、错误模块、放入模块、订阅模块和操作模块,所述接收模块,即接收数据库更新操作,写请求更新数据库;所述错误模块,即缓存数据出现问题,导致删除失败;所述放入模块,即将删除失败的key值放入消息队列中;所述订阅模块,即订阅消息队列的消息,获取要删除的key值;所述操作模块,即重试删除缓存数据操作,来确保缓存数据与数据库的最终一致性。
52.所述接收模块进一步具体为:用户产生行为获得数据,系统收到用户获得数据请求,通过应用程序写请求,与数据库取得联系,并执行数据库插入或更新脚本,完成用户数据的更新。
53.所述错误模块进一步具体为:在用户更新数据后,发生网络异常、缓存服务器故障或应用程序出现bug时,用户的缓存数据会出现问题,导致原有的旧数据不能删除,无法更新为新的用户数据。
54.所述放入模块进一步具体为:技术人员将删除失败的缓存数据key值投递消息队列内,对用户进行推送删除失败的缓存数据key值,便于用户收取。
55.所述订阅模块进一步具体为:用户通过订阅消息队列的消息,来接收缓存数据的key值,便于完成后续的重试删除缓存数据的操作。
56.所述操作模块进一步具体为:在系统中,通过对key

value结构的设置为过期或移除key值,然后将用户数据从数据库取出并存储在缓存数据内,这样用户就能够在系统的个人中心查询到自己的数据,来保证数据库和缓存数据的一致性。
57.以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献