上篇快取原理與設計之快取基本思想及分類 - 池塘裡洗澡的鴨子 - (cnblogs.com)中提到了快取的應用場景,這些場景的應用也是快取的優勢所在:減輕伺服器壓力、提公升效能、提高使用者體驗等;同時增加快取也意味著其他額外的開銷也就是代價:額外的硬體支出、高併發快取失效、快取與資料庫不同步(髒讀)等一系列問題。
問題存在了就要解決,而且解決問題的代價必然是可接收的,否則就不使用快取了。如何解決呢?介紹解決可能使用的「工具」——快取的讀寫模式。
快取的讀寫模式分三種:
1、cache aside pattern(常用)
cache aside pattern(旁路快取),是最經典的快取+資料庫讀寫模式:
讀的時候,先讀快取,快取沒有的話,就讀資料庫,然後取出資料後放入快取,同時返回響應。
更新的時候,先更新資料庫,然後再刪除快取。
參考mybatis功能點一:二級快取cache - 池塘裡洗澡的鴨子 - (cnblogs.com)中實現。
為什麼是刪除快取,而不是更新快取呢?
1)快取的值是乙個結構:hash、list,更新資料需要遍歷,
先遍歷(耗時)後修改。
2)懶載入,使用的時候才更新快取。
使用的時候才從db中載入,
也可以採用非同步的方式填充快取,比如開啟乙個執行緒定時將db的資料刷到快取中
。2、read/write through pattern
應用程式只操作快取,快取運算元據庫。
1)read-through(穿透讀模式/直讀模式):應用程式讀快取,快取沒有,由快取回源到資料庫,並寫入
快取。(gu**acache)
2)write-through(穿透寫模式/直寫模式):應用程式寫快取,快取寫資料庫。
該種模式需要提供資料庫的handler,開發較為複雜。
3、write behind caching pattern
應用程式只更新快取。
快取通過非同步的方式將資料批量或合併後更新到db中。
不能時時同步,甚至會丟資料。
架構設計 快取 快取的原理與應用
訪問特點和現實世界的財富分配一樣遵循二八定律 80 的業務訪問集中在20 的資料上。既然大部分的業務訪問集中在一小部分資料上,那麼就可以把這一小部分資料快取在記憶體中,可以減少資料庫的訪問壓力,提高整個 的資料訪問速度,改善資料的寫入效能。在整個 應用中,快取幾乎無處不在,既存在於瀏覽器,也存在於應...
快取原理與設計之快取基本思想及分類
在mybatis功能點一應用 二級快取整合redis 池塘裡洗澡的鴨子 cnblogs.com 中,mybatis使用第三方快取redis將查詢資料儲存。實際上除了redis還可以使用其他的第三方快取也可以,只有實現了jdk提供的cache介面即可。這個介面就是快取設計濃縮的精華。那麼究竟為什麼要使...
Redis快取設計之快取穿透 快取雪崩
提高系統響應速度,加速讀寫,redis將數全都存放在記憶體中,響應速度更快。降低了後台的負載,減少了對後端的直接訪問 資料一致性問題,快取層的資料與儲存層的資料可能存在不一致的問題 維護複雜度高了,加入快取後要同時處理快取曾和持久層的 邏輯 快取穿透就是指查詢乙個根本不存在的資料,導致很多請求直接穿...