自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis做為緩存,MySQL如何與Redis保持?jǐn)?shù)據(jù)一致性?

數(shù)據(jù)庫(kù) Redis
一般情況下Redis是用來(lái)實(shí)現(xiàn)應(yīng)用和數(shù)據(jù)庫(kù)之間的一個(gè)讀操作的緩存層,主要目的是減少數(shù)據(jù)庫(kù)的io,還可以提升數(shù)據(jù)庫(kù)io性能

Redis的作用

一般情況下Redis是用來(lái)實(shí)現(xiàn)應(yīng)用和數(shù)據(jù)庫(kù)之間的一個(gè)讀操作的緩存層,主要目的是減少數(shù)據(jù)庫(kù)的io,還可以提升數(shù)據(jù)庫(kù)io性能

方法一:

先更新MySQL數(shù)據(jù)庫(kù),再刪除緩存,再?gòu)臄?shù)據(jù)庫(kù)查詢到的最新的數(shù)據(jù)同步到redis。采用最終一致性性策略。

缺點(diǎn):相較于mq的方式,這種方式由于要查數(shù)據(jù)庫(kù)并將最新數(shù)據(jù)寫(xiě)到redis,可能會(huì)造成接口響應(yīng)速度變慢。

方法二:

更新mysql數(shù)據(jù)庫(kù),再采用mq異步的方式,將數(shù)據(jù)同步到redis中。

缺點(diǎn):數(shù)據(jù)同步延時(shí)概率比較大,數(shù)據(jù)庫(kù)的更改信息投遞到mq中,消費(fèi)者可能沒(méi)來(lái)得及消費(fèi)消息同步數(shù)據(jù)到redis。

優(yōu)點(diǎn):異步解耦

方法三:

基于訂閱mysql binlog,采用mq異步的形式將數(shù)據(jù)同步到redis(canal框架)。

將mysql以主從的方式部署,主庫(kù)負(fù)責(zé)寫(xiě),從庫(kù)負(fù)責(zé)讀,當(dāng)主庫(kù)的binlog日志文件發(fā)生改變時(shí),將信息同步到從庫(kù),從庫(kù)執(zhí)行對(duì)應(yīng)的sql,保證主從一致性。

canalServer端,偽裝成mysql的從節(jié)點(diǎn),訂閱mysql主節(jié)點(diǎn)的binlog文件,當(dāng)主節(jié)點(diǎn)的binlog發(fā)生變化時(shí),會(huì)將binlog日志文件發(fā)送給canalServer端,自己創(chuàng)建的處理程序連接到canalServer端,將數(shù)據(jù)同步到redis。

優(yōu)點(diǎn):手動(dòng)直接更改數(shù)據(jù)庫(kù)也會(huì)自動(dòng)同步到redis。

方法四:

延時(shí)雙刪策略(不推薦)

  • 先刪緩存,在更新mysql并同步到redis,在高并發(fā)的情況下,第一個(gè)線程還沒(méi)來(lái)得及更新mysql時(shí),其他線程讀取到的緩存可能為null值,將mysql舊的數(shù)據(jù)同步到redis中了。

解決辦法:延時(shí)刪除,在t1線程更新數(shù)據(jù)庫(kù)之后,sleep一段時(shí)間再去刪除緩存。

缺點(diǎn):t1線程延時(shí)多少秒再去刪除緩存中的key?難以控制,得根據(jù)業(yè)務(wù)邏輯的執(zhí)行時(shí)間和寫(xiě)緩存的時(shí)間來(lái)進(jìn)行估算。

補(bǔ)充:什么是雙寫(xiě)一致性協(xié)議?

先更新數(shù)據(jù)庫(kù),在更新緩存。

updateDB();
updateredis();

多個(gè)線程同步修改mysql和redis時(shí),由于mysql行鎖機(jī)制,多個(gè)線程同時(shí)修改同一行數(shù)據(jù),只能有一個(gè)線程修改成功,兩個(gè)線程更新完數(shù)據(jù)庫(kù)后同時(shí)更新redis,由于不能確保兩個(gè)線程更新緩存的先后順序,可能會(huì)造成數(shù)據(jù)庫(kù)和緩存的不一致性。

解決辦法:使用事務(wù)保證更新數(shù)據(jù)庫(kù)和更新緩存整個(gè)兩個(gè)操作的原子性。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2022-02-17 21:04:27

數(shù)據(jù)庫(kù)MysqlRedis

2023-05-26 07:34:50

RedisMySQL緩存

2021-12-14 07:15:57

MySQLRedis數(shù)據(jù)

2022-09-15 10:37:46

MySQLRedis數(shù)據(jù)一致性

2024-12-26 15:01:29

2023-07-27 08:29:09

2025-04-27 08:52:21

Redis數(shù)據(jù)庫(kù)緩存

2024-05-28 00:50:00

RedisMySQL緩存

2020-05-12 10:43:22

Redis緩存數(shù)據(jù)庫(kù)

2023-06-29 08:00:59

redis數(shù)據(jù)MySQL

2024-04-11 13:45:14

Redis數(shù)據(jù)庫(kù)緩存

2024-08-20 16:13:52

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機(jī)制

2024-07-04 12:36:50

2024-05-08 16:37:17

MySQLRedis數(shù)據(jù)庫(kù)

2009-06-18 09:18:08

Oracle檢索數(shù)據(jù)數(shù)據(jù)一致性事務(wù)恢復(fù)

2023-12-01 13:51:21

數(shù)據(jù)一致性數(shù)據(jù)庫(kù)

2022-05-31 08:37:59

RedisMySQL數(shù)據(jù)一致性

2021-10-14 10:00:46

MYSQL開(kāi)發(fā)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)