日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络知识:各种缓存核心知识整理,值得收藏!

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络知识:各种缓存核心知识整理,值得收藏! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緩存是為了減少數據庫和服務器壓力而產生的,在應用層編程時需主要考慮以下幾種情況:

  • 客戶端緩存

  • 服務端緩存

  • 網絡緩存(CDN緩存)

客戶端緩存

負責減輕服務端的存儲和頻繁的數據請求等壓力。

例如,在QQ初始階段,只有“會員”才可以把QQ表情存儲在“云端”之上,因為騰訊內部并沒有龐大的存儲系統存儲大量的QQ表情。

雖然現在騰訊已經取消了只有“會員”才可以存儲QQ表情的限制,但是大部分QQ表情仍然默認存儲在本地客戶端。

客戶端緩存大致可分為以下幾種:

  • 客戶端本地文件緩存,包括圖片、.txt文件、.doc文件等。

  • 客戶端本地HTTP、cookie等瀏覽器緩存。

  • 客戶端注冊表。

  • 客戶端微型數據庫(SQLite)。

  • 客戶端本地計算機內存。

服務端緩存

主要是為了減少數據庫壓力和外部服務接口的壓力,這也是實際編程中最常用的手段。

除減少數據庫的壓力外,緩存返回數據的響應速度比數據庫要快。另外,盡可能不調用外部接口,因為外部接口無論WebSocket、WebService,還是HTTP,其響應速度都是不可控的。如果外部接口響應時間過長,也會影響自身性能。

服務端緩存大致分為以下幾種:

  • 容器緩存,如Tomcat、Nginx、JBoss、Servlet等。

  • 中間件緩存,如MongoDB、Elasticsearch、Redis、RocketMQ、Kafka、ZooKeeper等。

  • JDK緩存,如磁盤緩存、堆內緩存、堆外緩存等。

  • 頁面靜態化緩存,如FreeMaker、Thymeleaf等。

  • 文件管理,如FastDFS等。

01?緩存的命中率

緩存的命中率指的是“緩存查詢的次數”與“總查詢次數”的比值。

在多級緩存下,可以調研每一級緩存的命中率,以便調整代碼。若某緩存命中率過低,則很可能是緩存穿透問題。

02?緩存回收方式

  • 基于時間:當某緩存超過生存時間時,則進行緩存回收。或者當某緩存最后被訪問后超過某時間仍然沒有被訪問,則進行緩存回收。

  • 基于空間:當緩存超過某大小時,則進行緩存回收。

  • 基于容量:當緩存超過某存儲條數時,則進行緩存回收。

  • 基于引用:軟引用和弱引用緩存會在JVM堆內存不足時進行緩存回收。

03?緩存回收策略

  • 先進先出(First In First Out,FIFO):一種簡單的淘汰策略,緩存對象以隊列的形式存在,如果空間不足,就釋放隊列頭部的(先緩存)對象,一般用鏈表實現。

  • 最近最久未使用(Least Recently Used,LRU):是根據訪問的時間先后進行淘汰的,如果空間不足,就釋放最久沒有被訪問的對象(上次訪問時間最早的對象)。

  • 最近最少使用(Least Frequently Used,LFU):根據最近訪問的頻率進行淘汰,如果空間不足,就釋放最近訪問頻率最低的對象。

04?緩存的設計模式

(1)Cache Aside模式:?首先讀取緩存中的數據,若緩存沒有命中,則讀取DB。當DB需要更新時,直接刪掉緩存中的數據。由于實現簡單,因此是最常用的一種設計模式,適用于讀操作多的情況。

(2)Read/Write through模式:?在讀取時先到緩存中查詢數據是否存在。如果存在,則直接返回。如果不存在,則由緩存組件負責從數據庫中同步加載數據,此數據永不過期。在寫入時,先查詢要寫入的數據在緩存中是否存在。如果存在。則更新緩存中的數據,并且由緩存組件把數據同步更新到數據庫中。Read/Write through模式初步屏蔽了底層數據庫操作,但是當把數據從緩存組件寫入DB時,有可能出現異常無法正確寫入的情況。因而需要謹慎記錄時間戳,以便跟蹤維護處理數據。該方案適合對持久性要求較低的業務場景。

(3)Write Behind Caching(Write Back)模式:?Write Behind Caching模式屬于Read/Write through模式的進階版,完全不考慮DB,增刪改查全部通過緩存進行處理。如果讀取不到數據,則直接認為該數據不存在,服務器會定期把緩存中的數據存儲到DB中。一般高并發應用程序最常用的是Write Behind Caching設計模式,它是性能最好的設計模式,但是實現較為復雜,一旦服務器宕機則有可能導致大量數據丟失。

05?緩存測試應涵蓋的內容

(1)?當前程序是否有可能出現緩存穿透、緩存擊穿、緩存雪崩等常見問題。

(2)?緩存是否設置了最大位數及時間等功能,是否會出現內存溢出的現象。

(3)?緩存能夠節省各數據源多少比重的讀取,例如進程內緩存節省了多少讀取Redis的比重,Redis緩存節省了多少讀取磁盤緩存的比重,磁盤緩存節省了多少讀取MySQL的比重。

(4)?App在無網或弱網環境下,是否可以正常打開及使用。例如網易云音樂在沒有網絡的情況下可以聽一些本地緩存的歌曲。

(5)?App在弱網轉正常網絡之后,緩存是否能被正常覆蓋。

(6)?各級緩存與數據庫是否能夠保持數據一致性,是否包含臟讀、不可重復讀等相關問題。

(7)?緩存是否能夠被手動刪除或刷新,若遇到緊急狀況是否能夠進行可逆性操作。

(8)?緩存的回收策略、回收方式等內容是否正常生效。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的网络知识:各种缓存核心知识整理,值得收藏!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。