根據上一章的學習,我們現在就可以用redisson框架來解決分布式鎖的問題,進行修改獲取**二級分類**如下
//todo 產生堆外記憶體溢位異常:outofdirectmemoryeror
@override
public map
>
getcatalogjson()
map> result = json.
parseobject
(catalogjson,
newtypereference
>>()
);return result;
}//使用redisson框架,進行加鎖,解決快取擊穿問題,提高效能
public map
>
getcatalogjsonfromdbwithredissonlock()
finally
return datafromdb;
}
帶來問題:我們讀所有的資料都是先來看快取,快取中沒有在執行上面的**讀取資料庫 datafromdb = getdatafromdb();,這是我們第一次新增進來,快取中肯定沒有,我們就要讀取資料庫;如果我們的資料修改了,**分類的資訊變了,我們再從快取中拿到的肯定就是乙個舊資料,這就是快取裡面的資料如何和資料庫保持一致(快取資料一致性),我們對於這個場景用到的非常多的兩種模式
雙寫模式
失效模式
快取一致性
一般應用而言,追求的都是快取的最終一致性。一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。引起這個問題的主要原因還是高併發的時...
快取一致性
計算機體系結構量化研究方法 第五版 學習筆記 快取一致性 1 快取一致性的問題 2 儲存器一致性的概念 3 一致性的基本實現方案 大型 多級快取可以充分降低處理器對儲存頻寬的需求。採用對稱共享儲存器的計算機通常支援對共享資料與專用資料的快取。多處理器之間的通訊基本上是通過讀寫共享資料實現。為了降低訪...
快取一致性解決方案
通常為了提公升使用者體驗,專案裡面一些熱點資料我們會把它放入快取裡面,以商品庫存為例我們就可以把商品對應的庫存資料放入redis,查詢資料時先去redis裡面找,沒有找到再訪問資料庫,如果庫存資料有更新就同時去更新redis的快取資料,以此達到減輕資料庫壓力。這種對快取資料的處理看似沒有問題,實際上...