在mybatis功能點一應用:二級快取整合redis - 池塘裡洗澡的鴨子 - (cnblogs.com)中,mybatis使用第三方快取redis將查詢資料儲存。實際上除了redis還可以使用其他的第三方快取也可以,只有實現了jdk提供的cache介面即可。
這個介面就是快取設計濃縮的精華。那麼究竟為什麼要使用快取,其原理是什麼以及為什麼jdk要這樣設計呢?
一、快取的使用場景(為什麼要使用快取)
1、就資料庫而言,db快取,減輕db伺服器壓力。
一般情況下資料存在資料庫中,應用程式直接運算元據庫。
當訪問量上萬,資料庫壓力增大,可以採取的方案有:
讀寫分離,分庫分表;
當訪問量達到10萬、百萬,就需要引入快取。
將已經訪問過的內容或資料儲存起來,當再次訪問時先找快取,快取命中返回資料。
不命中再找資料庫,並回填快取。
2、提高系統響應
資料庫的資料是存在檔案裡,也就是硬碟。與記憶體做交換(swap)
在大量瞬間訪問時(高併發)mysql單機會因為頻繁io而造成無法響應。mysql的innodb是有行鎖
將資料快取在redis中,也就是存在了記憶體中。
記憶體天然支援高併發訪問,可以瞬間處理大量請求
。3、做session分離
傳統的session是由tomcat自己進行維護和管理。
集群或分布式環境,不同的tomcat管理各自的session。
只能在各個tomcat之間,通過網路和io進行session的複製,極大的影響了系統的效能:
1)各個tomcat間複製session,效能損耗
2)不能保證各個tomcat的session資料同步
將登入成功後的session資訊,存放在redis中,這樣多個伺服器(tomcat)可以共享session資訊。
redis的作用是資料的臨時儲存,可參考nginx負載均衡中利用redis解決session一致性問題 - 池塘裡洗澡的鴨子 - (cnblogs.com)。
還有其他使用場景,比如做分布式鎖,樂觀鎖等不贅述。
二、快取的定義
什麼是快取?
快取原指cpu上的一種高速儲存器,它先於記憶體與cpu交換資料,速度很快;
現在泛指儲存在計算機上的原始資料的複製集,便於快速訪問。
在網際網路技術中,快取是系統快速響應的關鍵技術之一,
以空間換時間的一種技術(藝術)。在大型**中從瀏覽器到網路,再到應用伺服器,再到資料庫,通過在各個層面應用快取技術,大大提
公升了系統效能和使用者體驗。
三、快取分類
1、客戶端快取
傳統網際網路:頁面快取和瀏覽器快取
頁面快取:
頁面自身對某些元素或全部元素進行儲存,並儲存成檔案。
cache等
開啟步驟:
1)設定manifest描述檔案
使用localstorage
進行本地的資料儲存,示例**:
瀏覽器快取
當客戶端向伺服器請求資源時,會先抵達瀏覽器快取,如果瀏覽器有「要請求資源」的副本,就可以直接
從瀏覽器快取中提取而不是從原始伺服器中提取這個資源。
瀏覽器快取可分為強制快取和協商快取。
強制快取:直接使用瀏覽器的快取資料
條件:cache-control的max-age沒有過期或者expires的快取時間沒有過期。
協商快取:伺服器資源未修改,使用瀏覽器的快取(304);反之,使用伺服器資源(200)。
快取:
2、網路端快取
通過**的方式響應客戶端請求,對重複的請求返回快取中的資料資源。
web**快取:
可以快取原生伺服器的靜態資源,比如樣式、等。
常見的反向**伺服器比如大名鼎鼎的nginx。
3、服務端快取
伺服器端快取是整個快取體系的核心。包括資料庫級快取、平台級快取和應用級快取。
資料庫級快取:
資料庫是用來儲存和管理資料的。
mysql在server層使用查詢快取機制。將查詢後的資料快取起來。
k-v結構,key:select語句的hash值,value:查詢結果
innodb儲存引擎中的buffer-pool用於快取innodb索引及資料塊。
平台級快取:
平台級快取指的是帶有快取特性的應用框架。
比如:gu**acache 、ehcache(二級快取,硬碟)、oscache(頁面快取)等。
部署在應用伺服器上,也稱為伺服器本地快取。
應用級快取:
具有快取功能的中介軟體:redis、memcached、evcache(aws)、tair(阿里 、美團)等。
採用k-v形式儲存。
利用集群支援高可用、高效能、高併發、高擴充套件的
分布式快取
設計自己產品的時候,大有作為的快取在應用級快取,這也是**快取的重點區域。
快取原理與設計之快取的讀寫模式
上篇快取原理與設計之快取基本思想及分類 池塘裡洗澡的鴨子 cnblogs.com 中提到了快取的應用場景,這些場景的應用也是快取的優勢所在 減輕伺服器壓力 提公升效能 提高使用者體驗等 同時增加快取也意味著其他額外的開銷也就是代價 額外的硬體支出 高併發快取失效 快取與資料庫不同步 髒讀 等一系列問...
架構設計 快取 快取的原理與應用
訪問特點和現實世界的財富分配一樣遵循二八定律 80 的業務訪問集中在20 的資料上。既然大部分的業務訪問集中在一小部分資料上,那麼就可以把這一小部分資料快取在記憶體中,可以減少資料庫的訪問壓力,提高整個 的資料訪問速度,改善資料的寫入效能。在整個 應用中,快取幾乎無處不在,既存在於瀏覽器,也存在於應...
Spring註解快取設計原理及實戰
spring 3.1後引入註解快取,其本質不是乙個具體的快取實現,而是乙個對快取使用的抽象。通過在既有 中新增少量自定義註解,即可夠達到使用快取物件和快取方法的返回物件的效果。spring的快取技術具備相當的靈活性,不僅能夠使用spel來定義快取的key和各種condition,還提供開箱即用的快取...