一般場景下數(shù)據(jù)庫和redis的同步機(jī)制:
針對有請求來讀取數(shù)據(jù)庫的場景:
?但是如果有想要修改數(shù)據(jù)庫內(nèi)容的場景該怎么保持同步呢?
在我們訪問redis時(shí),redis中的數(shù)據(jù)可能不是熱點(diǎn)數(shù)據(jù),即此時(shí)數(shù)據(jù)庫的更新操作已經(jīng)完成,但是還沒有同步到redis中。
解決方案--延時(shí)雙刪
延時(shí)雙刪方案執(zhí)行步驟
1.刪除redis
2.更新數(shù)據(jù)庫
3.延時(shí)500毫秒
4.刪除redis
為什么要延時(shí)呢?
因?yàn)?mysql 和 redis 主從節(jié)點(diǎn)數(shù)據(jù)不是實(shí)時(shí)同步的,同步數(shù)據(jù)需要時(shí)間。文章來源:http://www.zghlxwxcb.cn/news/detail-469722.html
數(shù)據(jù)工作的大致流程:文章來源地址http://www.zghlxwxcb.cn/news/detail-469722.html
- 服務(wù)節(jié)點(diǎn)刪除 redis 主庫數(shù)據(jù)。
- 服務(wù)節(jié)點(diǎn)修改 mysql 主庫數(shù)據(jù)。
- 服務(wù)節(jié)點(diǎn)使得當(dāng)前業(yè)務(wù)處理?
等待一段時(shí)間
,等 redis 和 mysql 主從節(jié)點(diǎn)數(shù)據(jù)同步成功。 - 服務(wù)節(jié)點(diǎn)從 redis 主庫刪除數(shù)據(jù)。
- 當(dāng)前或其它服務(wù)節(jié)點(diǎn)讀取 redis 從庫數(shù)據(jù),發(fā)現(xiàn) redis 從庫沒有數(shù)據(jù),從 mysql 從庫讀取數(shù)據(jù),并寫入 redis 主庫。
缺點(diǎn)
- 延時(shí)雙刪,有等待環(huán)節(jié),如果系統(tǒng)要求低延時(shí),這種場景就不合適了。
- 延時(shí)雙刪,不適合“秒殺”這種頻繁修改數(shù)據(jù)和要求數(shù)據(jù)強(qiáng)一致的場景。
- 延時(shí)雙刪,延時(shí)時(shí)間是一個(gè)預(yù)估值,不能確保 mysql 和 redis 數(shù)據(jù)在這個(gè)時(shí)間段內(nèi)都實(shí)時(shí)同步或持久化成功了。
總結(jié)
- 延時(shí)雙刪用比較簡潔的方式實(shí)現(xiàn) mysql 和 redis 數(shù)據(jù)最終一致性,但它不是強(qiáng)一致。
- 延時(shí),是因?yàn)?mysql 和 redis 主從節(jié)點(diǎn)數(shù)據(jù)同步不是實(shí)時(shí)的,所以需要等待一段時(shí)間,去增強(qiáng)它們的數(shù)據(jù)一致性。
-
延時(shí)
?是指當(dāng)前請求邏輯處理延時(shí),而不是當(dāng)前線程或進(jìn)程睡眠延時(shí)。 - mysql 和 redis 數(shù)據(jù)一致性是一個(gè)復(fù)雜的課題,通常是多種策略同時(shí)使用,例如:延時(shí)雙刪、redis 過期淘汰、通過路由策略串行處理同類型數(shù)據(jù)、分布式鎖等等
到了這里,關(guān)于Redis和Mysql數(shù)據(jù)同步方案---延遲雙刪的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!