【天天都在BATJ面試】緩存與數據庫不一致怎麼辦?

昨天的問題有答對的嗎?今天的面試題又來了哦!node

面試

緩存與數據庫不一致怎麼辦?redis

把你的理解和答案發在評論區吧,關注我一下,答案下期揭曉。數據庫


上期問題緩存

使用redis如何設計分佈式鎖?說一下實現思路?使用zk能夠嗎?如何實現?這兩種有什麼區別?分佈式

答案性能

redis: 1.線程A setnx(上鎖的對象,超時時的時間戳t1),若是返回true,得到鎖。線程

2.線程B 用get獲取t1,與當前時間戳比較,判斷是是否超時,沒超時false,若超時執行第3步;設計

3.計算新的超時時間t2,使用getset命令返回t3(該值可能其餘線程已經修改過),若是t1==t3,得到鎖,若是t1!=t3說明鎖被其餘線程獲取了。對象

4.獲取鎖後,處理完業務邏輯,再去判斷鎖是否超時,若是沒超時刪除鎖,若是已超時,不用處理(防止刪除其餘線程的鎖)。

zk: 1.客戶端對某個方法加鎖時,在zk上的與該方法對應的指定節點的目錄下,生成一個惟一的瞬時有序節點node1;

2.客戶端獲取該路徑下全部已經建立的子節點,若是發現本身建立的node1的序號是最小的,就認爲這個客戶端得到了鎖。

3.若是發現node1不是最小的,則監聽比本身建立節點序號小的最大的節點,進入等待。

4.獲取鎖後,處理完邏輯,刪除本身建立的node1便可。

區別:zk性能差一些,開銷大,實現簡單。

你答對了嗎?每答對還不快點點贊收藏,下次去大廠面試,考到的就是這道題!!!

相關文章
相關標籤/搜索