redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?

先举两个例子,都是我做过的名目,运用场景都特殊大略:

redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?  第1张

已经做过的一个保费试算的名目,交易场景是按照用户基础消息+费率做计划,获得一个保费值,即使不领会这个交易场景的话,不妨看做【用户输出】+【数据库数据】+【确定的计划】=【截止】;那些数据搀杂并且多,运用一再,然而每个产物的费率数据,简直是不会变换的(新增窜改简略都不会有):那些数据被咱们放在Redis中,并且树立成永不作废;由于数据不会窜改,那么数据库平静存中的数据确定是一律的。

redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?  第2张

此刻做的名目中的一个功效,大略刻画交易场景:体例从N个交易体例中抽取数据,并做加工调整,加工实行后革新到数据库中;这个场景也比拟有特性,数据实效性诉求很低(数据加工到数据库仍旧晚了一天),数据变革的功夫恒定且独一(批处置每天恒定功夫举行,惟有一个批处置线程在跑);所以咱们沿用了一个比拟顽固的战略,即是树立数据在Redis中的过时功夫;等数据过时后,当查问的功夫创造数据不在缓存中,再从数据库中查问出来后放入缓存。

redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?  第3张

此刻想一想Redis中数据的革新战略有哪些(大概说缓存革新战略)?

redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?  第4张

给缓存树立过时功夫,是我觉得比拟好的办法(这边不计划缓存雪崩的题目),这个【比拟好】是在实行难度和数据普遍性之间找到了一个平稳点;实行起来特殊大略,然而大概在数据变革后,缓存作废前的这段功夫,数据库平静存之间的数据是不普遍的(但最后会普遍)。先革新数据库,再革新缓存:有两个比拟大的题目,一是多线程的功夫,大概会形成数据库平静存数据的不普遍,并且这个不普遍大概会是长久的。二是即使革新操纵比拟多的话,会一再地革新缓存。

A线程:set 数据库 key=1;

B线程:set 数据库 key=100;B线程:set 缓存 key=100;A线程:set 缓存 key=1;(本质上,该当即是100,如许就形成了缓存和数据库中的数据不普遍,而且即使数据不复革新,那么会使长久不普遍)

先删缓存,再革新数据库:这个会展示题目,仍旧A/B两个线程,即使A简略了缓存之后,在革新数据库之前,B过来查问不到缓存,所以就查问了数据库(A还没革新),把数据写入缓存,这功夫A才把数据库革新掉,这大概就会形成长久性的不普遍。

先革新数据库,再删缓存:一律的原因,大师不妨本人想一想这个进程。

有些人大概感触这个几率很小,如何大概有这么巧的工作,凑巧都是A做到一半,B插进入把十足的工作做完,A再去做后一半的操纵;然而几率小,也是大概爆发的,不得不商量。

再有很多搀杂的实行计划,比方革新完数据库之后,把革新操纵发给无序的动静部队(然而进程越搀杂,不普遍的功夫会越长),由其余的线程从部队内里程序实行革新或简略缓存的操纵;

然而我觉得,框架结构越搀杂也越简单堕落,还不如按照本质的场景和共青团和少先队的开拓程度,有理采用缓存的运用,并给缓存树立有理的过时功夫。

我将连接瓜分Java开拓、框架结构安排、步调员工作兴盛等上面的看法,蓄意能获得你的关心。

转载请说明出处
网资源分享 » redis 使用教程:项目中用到了Redis做缓存,如何保证数据库和缓存数据的一致性?

发表评论

欢迎 访客 发表评论