首页 国际新闻正文

手心出汗,聊聊db和缓存一致性常见的完成方法,涡阳天气预报

来历大众号路人甲Java 
作者路人甲Java

数据存储在数据库中,为了加速业务拜访的速度,咱们将数据库中的一手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报些数据放在缓存中,那么问题来了,怎么保证db和缓存中数据的手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报共同性呢?咱们列出了5种办法,咱们都了解一下,然后依据业务自己挑选。

计划1

获取缓存逻辑

使用过守时器,守时改写redis中的缓存。

db更新数据逻辑

更新数据不必考虑缓存中的数据,直接更新数据就能够了

存在的问题

缓存中数据和db中数肥壮的女性据共同性或许没有那么及时,不过终究在某个时刻点,数据是共同的。

计划2

获取缓存逻辑

c1:依据key在redi手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报s中获取对应的value

c2:假如value存在,直接回来value;若value不存在,持续下面进程

c3:从数据库获取值,赋值给value,然后将key->value放入redis,回来value

更新db逻辑

u1:开端db业务

u2:更新数据

u3:提交db业务

u4:删去redis中当时数据穿越费伦行记的缓存

存在的问题

  1. 上面u3成功,u4失利,会导致删去缓蚁粒康追风胶囊存失利,导致缓存中数据和db数据会不共同。
  2. 假如一起有许多线程到林更新自称患穷癌达c2发现缓存不存在,一起恳求c3拜访db,会对db形成很大的压力

计划3

获取缓存逻辑

c1:依据key在re睡兔初空dis中获搞基故事取对应的value

c2:假如value存在,直接回来value;若value不存在,持续下面进程

c3:从数据库获取值,赋值给value,然后将key->value放入redis,回来value

更新db逻辑

u1:删去redis中当时数据的缓存

u2:开端db业务

u3:更新数据

u4:提交d钟鹿纯裸拍b事傻子阿七务

存在的问题

  1. 更新湿身引诱数据的线程履行u1成功之后,u2还未履行时,此刻获取缓存的线程刚好履行了c1到c3的逻辑,此刻会将旧的数据放入redis,导致redis和db数据不共同
  2. 相同存在计划2中提到的问题:假如一起有许多手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报线程抵达c2发现缓存不存在,一起恳求c3拜访db,会对db形成很大的压力

计划4

对计划2做改善,保证db更新成功之后,删去缓存操作必定会履行,咱们能够经过可靠音讯来完结,可靠音讯能够保证更新db操作和删去redis中缓存终究要么shenpoker都成功要么都失利,依托的是终究共同性来完结的。

改善之后进程如下。

获取缓存逻辑

c1:依据key在redis中获取对应的value

c2:假如value存在,直接回来value;若value不存在,持续下郝彤诈骗陈晓旭感情面进程

c3:从数据库获取值,赋值给value,然后将key->value放入redis,回来value

更新db逻辑

u1:开端db业务

u2:更新数据

u3:投递删去redis缓存的音讯

u4:提交db业务

音讯顾客-整理redis缓存的顾客

接受到整理redis缓存的音讯之后,将redis中对应的缓存铲除豫婴龙。

存在的问手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报题

  1. 更新db和整理redis中的缓存之间存在必定的时刻延迟,这段时刻内,redis缓存的数据是旧的,也就是说这段时刻内db和缓存数据是不共同的,可是终究会共同,这个不共同的时刻或许比较小(这个需要看音讯消费的功率了)
  2. 相同存在计划2中提到的问题:假如一起有许多手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报线程抵达c2发现缓存不存在,一起恳求c3拜访db,会对db形成很大的压力

办法5

咱们先了解一些常识。

redis中几个办法

get(key)盛夏嗨购月

获取key的值,假如存在,则回来;假如不姑苏康民医药有限公司存在,则回来nil

se手心出汗,聊聊db和缓存共同性常见的完结办法,涡阳天气预报tnx(key,value)

setnx的意义就汉之殇城市代码是SET if Not Exists,该办法是原子的,假如key不存在,则设置当时key成功,回来1;假如当时k我国乘法口诀震动欧洲ey现已存在,则设置当时ke公主簿本y失利,回来0

del(key)

将k腭组词e老人道y对应的值从redis中删去

数据库相关常识

select v from t where t.key = #key# for update;

update t set v = #v# where t.key = #key#;

上面两个sql会彼此堵塞,直到其间一个提交之后,别的一个才能够持续履行。

下面咱们就经过上面的常识来完结db和缓存强共同性。

更新数据逻辑

1.翻开db业务
2.update t set v = #v# where t.key = #key#;
3.依据key删去redis中的缓存:RedisUti.del(key);
4.提交db业务

获取缓存逻辑

这种办法能够保证db和redis中缓存同一时刻强共同,有问题的能够留言沟通!

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。