快取同步的常用模式
快取同步的模式,可以按照快取的用途(主要用於讀或者寫)分為兩類:讀快取的同步和寫快取的同步。
讀快取的同步:
快取預載入模式
提前將資料從資料庫載入到快取,如果資料庫有寫更新,同步更新快取。在秒殺情況下,我們對商品資料就按照這種模式進行處理。
快取直讀模式應用先檢視快取中是否有該資料,有則直接使用,如果沒有,從資料庫載入,然後放入快取,下次以後再訪問就可以直接從快取中獲得。
寫快取的同步:
快取直寫模式
在資料更新時,同時寫入快取和資料庫。這種模式是最穩妥的辦法,但是效能會受到一定的影響。
快取回寫模式
在資料更新時只寫入快取。通常由乙個後台佇列檢查快取中資料的變化,再將據寫到後端資料庫。
如何避免快取和資料庫的資料不同步
上面介紹了快取同步的模式,但光依靠模式,是不能完全阻止資料同步是沒有問題的。比如說,有兩個執行緒a和b,在併發情況下,他們如果能同時操作某條資料,由於同乙個資料進行讀寫,在資料庫層面併發的讀寫並不能保證完成順序。就有可能導致資料庫與快取不同步。
所以在在快取模式下,處理過程中,需要通過對該資料加鎖,保證對資料的處理是嚴格按照序列處理的。
如何檢查快取和資料庫的資料是同步的
1. 屬性中增加乙個版本號或者時間戳字段,每次更新快取後,版本號+1或者取更新時間戳,下一次寫操作前,先比較,然後再更新。
2. 建立乙個定時任務,定義乙個同步週期(5分鐘或者15分鐘),定時任務會對最近乙個時間週期內資料庫中更新過的資料進行比較,於快取(例如redis)中的資料進行匹配和比較。
快取同步機制整理
使資料庫資料和快取中的資料在一定時間內保持一致 訪問資料庫之前先檢查快取中是否有快取,如果沒有在資料庫更新後更新快取。應用先檢視快取中是否有該資料,有則直接使用,如果沒有,從資料庫載入,然後放入快取,下次以後再訪問就可以直接從快取中獲得。在資料更新時,同時寫入快取cache和後端儲存 db 此模式的...
資料庫和快取(二)
索引種類 索引的作用 exists和in的區別 左連線 右連線 全連線 樂觀鎖 時間戳在運算元據時不加鎖,而是通過時間戳來控制併發出現的問題 悲觀鎖 修改某條資料時,不允許別人讀取該資料。可分為排他鎖和共享鎖 讀鎖和寫鎖 時間戳 在資料庫表中額外加乙個時間戳列timestamp 行級鎖 insert...
redis資料庫的快取擊穿和快取穿透
快取穿透是指查詢乙個一定不存在的資料,由於快取不命中,接著查詢資料庫也無法查詢出結果,因此也不會寫入到快取中,這將會導致每個查詢都會去請求資料庫,造成快取穿透 快取雪崩是指,由於快取層承載著大量請求,有效的保護了儲存層,但是如果快取層由於某些原因整體不能提供服務,於是所有的請求都會達到儲存層,儲存層...