精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

動手實現一個Localcache-設計篇

開發 前端
最近想動手寫一個localcache練練手,工作這么久了,也看過很多同事實現的本地緩存,都各有所長,自己平時也在思考如何實現一個高性能的本地緩存,接下來我將基于自己的理解實現一版本地緩存,歡迎各位大佬們提出寶貴意見,我會根據意見不斷完善的。

[[439213]]

本文轉載自微信公眾號「Golang夢工廠」,作者AsongGo 。轉載本文請聯系Golang夢工廠公眾號。

前言

哈嘍,大家好,我是asong。最近想動手寫一個localcache練練手,工作這么久了,也看過很多同事實現的本地緩存,都各有所長,自己平時也在思考如何實現一個高性能的本地緩存,接下來我將基于自己的理解實現一版本地緩存,歡迎各位大佬們提出寶貴意見,我會根據意見不斷完善的。

本篇主要介紹設計一個本地緩存都要考慮什么點,后續為實現文章,歡迎關注這個系列。

為什么要有本地緩存

隨著互聯網的普及,用戶數和訪問量越來越大,這就需要我們的應用支撐更多的并發量,比如某寶的首頁流量,大量的用戶同時進入首頁,對我們的應用服務器和數據庫服務器造成的計算也是巨大的,本身數據庫訪問就占用數據庫連接,導致網絡開銷巨大,在面對如此高的并發量下,數據庫就會面臨瓶頸,這時就要考慮加緩存,緩存就分為分布式緩存和本地緩存,大多數場景我們使用分布式緩存就可以滿足要求,分布式緩存訪問速度也很快,但是數據需要跨網絡傳輸,在面對首頁這種高并發量級下,對性能要求是很高的,不能放過一點點的性能優化空間,這時我們就可以選擇使用本地緩存來提高性能,本地緩存不需要跨網絡傳輸,應用和cache都在同一個進程內部,快速請求,適用于首頁這種數據更新頻率較低的業務場景。

綜上所述,我們往往使用本地緩存后的系統架構是這樣的:

本地緩存雖然帶來性能優化,不過也是有一些弊端的,緩存與應用程序耦合,多個應用程序無法直接的共享緩存,各應用或集群的各節點都需要維護自己的單獨緩存,對內存是一種浪費,使用緩存的是我們程序員自己,我們要根據根據數據類型、業務場景來準確判斷使用何種類型的緩存,如何使用這種緩存,以最小的成本最快的效率達到最優的目的。

思考:如何實現一個高性能本地緩存

數據結構

第一步我們就要考慮數據該怎樣存儲;數據的查找效率要高,首先我們就想到了哈希表,哈希表的查找效率高,時間復雜度為O(1),可以滿足我們的需求;確定是使用什么結構來存儲,接下來我們要考慮以什么類型進行存儲,因為不同的業務場景使用的數據類型不同,為了通用,在java中我們可以使用泛型,Go語言中暫時沒有泛型,我們可以使用interface類型來代替,把解析數據交給程序員自己來進行斷言,增強了可擴展性,同時也增加一些風險。

總結:

  • 數據結構:哈希表;
  • key:string類型;
  • value:interface類型;

并發安全

本地緩存的應用肯定會面對并發讀寫的場景,這是就要考慮并發安全的問題。因為我們選擇的是哈希結構,Go語言中主要提供了兩種哈希,一種是非線程安全的map,一種是線程安全的sync.map,為了方便我們可以直接選擇sync.map,也可以考慮使用map+sync.RWMutex組合方式自己實現保證線程安全,網上有人對這兩種方式進行比較,在讀操作遠多于寫操作的時候,使用sync.map的性能是遠高于map+sync.RWMutex的組合的。在本地緩存中讀操作是遠高于寫操作的,但是我們本地緩存不僅支持進行數據存儲的時候要使用鎖,進行過期清除等操作時也需要加鎖,所以使用map+sync.RWMutex的方式更靈活,所以這里我們選擇這種方式保證并發安全。

高性能并發訪問

加鎖可以保證數據的讀寫安全性,但是會增加鎖競爭,本地緩存本來就是為了提升性能而設計出來,不能讓其成為性能瓶頸,所以我們要對鎖競爭進行優化。針對本地緩存的應用場景,我們可以根據key進行分桶處理,減少鎖競爭。

我們的key都是string類型,所以我們可以使用djb2哈希算法把key打散進行分桶,然后在對每一個桶進行加鎖,也就是鎖細化,減少競爭。

對象上限

因為本地緩存是在內存中存儲的,內存都是有限制的,我們不可能無限存儲,所以我們可以指定緩存對象的數量,根據我們具體的應用場景去預估這個上限值,默認我們選擇緩存的數量為1024。

淘汰策略

因為我們會設置緩存對象的數量,當觸發上限值時,可以使用淘汰策略淘汰掉,常見的緩存淘汰算法有:

LFU

LFU(Least Frequently Used)即最近不常用算法,根據數據的歷史訪問頻率來淘汰數據,這種算法核心思想認為最近使用頻率低的數據,很大概率不會再使用,把使用頻率最小的數據置換出去。

存在的問題:

某些數據在短時間內被高頻訪問,在之后的很長一段時間不再被訪問,因為之前的訪問頻率急劇增加,那么在之后不會在短時間內被淘汰,占據著隊列前頭的位置,會導致更頻繁使用的塊更容易被清除掉,剛進入的緩存新數據也可能會很快的被刪除。

LRU

LRU(Least Recently User)即最近最少使用算法,根據數據的歷史訪問記錄來淘汰數據,這種算法核心思想認為最近使用的數據很大概率會再次使用,最近一段時間沒有使用的數據,很大概率不會再次使用,把最長時間未被訪問的數據置換出去

存在問題:

當某個客戶端訪問了大量的歷史數據時,可能會使緩存中的數據被歷史數據替換,降低緩存命中率。

FIFO

FIFO(First in First out)即先進先出算法,這種算法的核心思想是最近剛訪問的,將來訪問的可能性比較大,先進入緩存的數據最先被淘汰掉。

存在的問題:

這種算法采用絕對公平的方式進行數據置換,很容易發生缺頁中斷問題。

Two Queues

Two Queues是FIFO + LRU的結合,其核心思想是當數據第一次訪問時,將數據緩存在FIFO隊列中,當數據第二次被訪問時將數據從FIFO隊列移到LRU隊列里面,這兩個隊列按照自己的方法淘汰數據。

存在問題:

這種算法和LRU-2一致,適應性差,存在LRU中的數據需要大量的訪問才會將歷史記錄清除掉。

ARU

ARU(Adaptive Replacement Cache)即自適應緩存替換算法,是LFU和LRU算法的結合使用,其核心思想是根據被淘汰數據的訪問情況,而增加對應 LRU 還是 LFU鏈表的大小,ARU主要包含了四個鏈表,LRU 和 LRU Ghost ,LFU 和LFU Ghost, Ghost 鏈表為對應淘汰的數據記錄鏈表,不記錄數據,只記錄 ID 等信息。

截屏2021-12-04 下午6.52.05

當數據被訪問時加入LRU隊列,如果該數據再次被訪問,則同時被放到 LFU 鏈表中;如果該數據在LRU隊列中淘汰了,那么該數據進入LRU Ghost隊列,如果之后該數據在之后被再次訪問了,就增加LRU隊列的大小,同時縮減LFU隊列的大小。

存在問題:

因為要維護四個隊列,會占用更多的內存空間。

選擇

每一種算法都有自己特色,結合我們本地緩存使用的場景,選擇ARU算法來做緩存緩存淘汰策略是一個不錯的選擇,可以動態調整 LRU 和 LFU 的大小,以適應當前最佳的緩存命中。

過期清除

除了使用緩存淘汰策略清除數據外,還可以添加一個過期時間做雙重保證,避免不經常訪問的數據一直占用內存。可以有兩種做法:

數據過期了直接刪除

數據過期了不刪除,異步更新數據

兩種做法各有利弊,異步更新數據需要具體業務場景選擇,為了迎合大多數業務,我們采用數據過期了直接刪除這種方法更友好,這里我們采用懶加載的方式,在獲取數據的時候判斷數據是否過期,同時設置一個定時任務,每天定時刪除過期的數據。

緩存監控

很多人對于緩存的監控也比較忽略,基本寫完后不報錯就默認他已經生效了,這就無法感知這個緩存是否起作用了,所以對于緩存各種指標的監控,也比較重要,通過其不同的指標數據,我們可以對緩存的參數進行優化,從而讓緩存達到最優化。如果是企業應用,我們可以使用Prometheus進行監控上報,我們自測可以簡單寫一個小組件,定時打印緩存數、緩存命中率等指標。

GC調優

對于大量使用本地緩存的應用,由于涉及到緩存淘汰,那么GC問題必定是常事。如果出現GC較多,STW時間較長,那么必定會影響服務可用性;對于這個事項一般是具體case具體分析,本地緩存上線后記得經常查看GC監控。

緩存穿透

使用緩存就要考慮緩存穿透的問題,不過這個一般不在本地緩存中實現,基本交給使用者來實現,當在緩存中找不到元素時,它設置對緩存鍵的鎖定;這樣其他線程將等待此元素被填充,而不是命中數據庫(外部使用singleflight封裝一下)。

參考文章

https://zhuanlan.zhihu.com/p/352910565

https://cloud.tencent.com/developer/article/1676115

https://tech.meituan.com/2017/03/17/cache-about.html

https://www.cnblogs.com/vancasola/p/9951686.html

總結

真正想設計一個高性能的本地緩存還是挺不容易的,由于我也才疏學淺,本文的設計思想也是個人實踐想法,歡迎大家提出寶貴意見,我們一起做出來一個真正的高性能本地緩存。

下篇文章我將分享自己的寫的一個本地緩存,盡請期待!!!【編輯推薦】

 

責任編輯:武曉燕 來源: Golang夢工廠
相關推薦

2022-01-04 11:08:02

實現Localcache存儲

2024-12-06 09:58:09

2017-02-14 10:20:43

Java Class解析器

2021-08-21 15:40:24

CPU計算機電子領域

2017-03-02 13:31:02

監控系統

2021-09-07 07:34:42

CSS 技巧代碼重構

2023-10-10 13:28:44

Pythonpygame

2025-10-20 04:00:00

2009-07-24 11:29:33

WinForm表單窗體

2025-11-11 09:25:19

2015-06-02 09:51:40

iOS網絡請求封裝接口

2015-06-02 10:24:43

iOS網絡請求降低耦合

2020-03-26 09:36:06

AB Test平臺的流量

2018-09-18 09:38:11

RPC遠程調用網絡通信

2019-11-26 09:42:36

代碼開發API

2024-03-08 12:45:00

C#Web服務器

2022-04-05 16:44:59

系統Vue.js響應式

2019-11-14 15:44:32

系統緩存架構

2022-07-13 15:31:29

手繪板canvas鴻蒙

2022-08-02 14:21:20

滑動驗證碼鴻蒙
點贊
收藏

51CTO技術棧公眾號

日本久久久久久| 日韩av网址在线| 日韩欧美猛交xxxxx无码| 一区二区视频免费| 伊人色**天天综合婷婷| 欧美成人a∨高清免费观看| 国精产品一区一区三区视频| 国产香蕉在线观看| 日韩成人一级片| 九色成人免费视频| 黄免费在线观看| 在线精品国产亚洲| 欧美视频一区在线| 精品无码一区二区三区在线| 污视频在线免费观看| 免费人成在线不卡| 91精品国产91久久久久久不卡| 老熟妇一区二区| av自拍一区| 欧美日本一区二区在线观看| mm131午夜| 国产综合在线观看| 成人永久aaa| 91精品国产综合久久香蕉的用户体验| 激情综合网五月婷婷| 久久综合色占| 亚洲国产精品va在线| 国产喷水theporn| av在线资源| 一区二区三区中文字幕电影| 久久精品第九区免费观看| 一区二区三区免费在线视频| 亚洲电影成人| 欧美日本啪啪无遮挡网站| b站大片免费直播| 乱亲女h秽乱长久久久| 69av一区二区三区| 日日干夜夜操s8| 欧美性suv| 欧美日韩国产一中文字不卡| 亚洲蜜桃在线| 岛国在线大片| 国产嫩草影院久久久久| 精品国产乱码久久久久软件 | 午夜小视频免费| 韩国av一区二区三区四区| 日韩av片免费在线观看| 国产午夜精品一区二区理论影院| 日韩片欧美片| 少妇高潮久久77777| 亚洲永久精品ww.7491进入| aiai久久| 亚洲第一免费网站| 国产成人精品无码片区在线| 性欧美video另类hd尤物| 色婷婷国产精品| 午夜肉伦伦影院| 欧美香蕉视频| 欧美性一区二区| 亚洲国产日韩欧美在线观看| 鲁鲁在线中文| 欧美午夜片在线免费观看| 999久久欧美人妻一区二区| 国产乱色在线观看| 曰韩精品一区二区| 人妻无码久久一区二区三区免费| 国产蜜臀在线| 欧美日韩国产一中文字不卡| www.好吊操| 久久青草伊人| 在线免费观看不卡av| aaa毛片在线观看| 丁香久久综合| 欧美一级国产精品| 2025中文字幕| 午夜欧洲一区| 在线观看久久久久久| 久久视频一区二区三区| 久久一级电影| 免费91在线视频| 国产在线观看成人| 久久精品盗摄| 成人在线视频福利| 国产综合在线播放| 国产人成亚洲第一网站在线播放| 日韩在线电影一区| 国产91在线视频蝌蚪| 日韩av在线影院| 中文字幕亚洲综合| 欧美黄色aaa| 亚洲茄子视频| 国产精品久久久久久久久久小说| 亚洲图片在线视频| 精品一区二区三区久久| 91色在线视频| 日韩三级电影网| 亚洲欧洲日韩一区二区三区| 中文字幕中文字幕在线中一区高清| 国产传媒在线播放| 色偷偷88欧美精品久久久| 色片在线免费观看| 激情小说一区| 精品国偷自产在线| 在线观看黄网站| 精油按摩中文字幕久久| 国产精品久久精品国产| 黄色av网址在线免费观看| 自拍偷拍亚洲激情| 国产成人久久777777| 久久久久亚洲精品中文字幕| 欧美tk丨vk视频| 美女100%露胸无遮挡| 国内在线观看一区二区三区| 2019国产精品自在线拍国产不卡| 亚洲永久精品视频| 2021久久国产精品不只是精品| 亚洲女人毛片| 三上悠亚亚洲一区| 日韩av综合网站| 国产一级视频在线播放| 日韩成人免费在线| 久久国产精品一区二区三区| 91网在线播放| 日本久久电影网| 日b视频在线观看| 国产精品草草| 91午夜在线播放| 成人动漫在线免费观看| 亚洲a一区二区| 黑人无套内谢中国美女| 精品freesex老太交| 91精品国产乱码久久久久久久久 | 欧美午夜视频在线观看| ass极品水嫩小美女ass| 日韩在线高清| 国产精品女人网站| 电影av一区| 欧美日韩中文字幕精品| 青青草福利视频| 亚洲制服少妇| 欧美精品一区二区三区久久| av片在线观看网站| 欧美精品三级在线观看| 麻豆视频免费在线播放| 久久亚洲二区| 日韩三级电影| 成人a在线观看高清电影| 亚洲精品狠狠操| 成人精品在线看| 99热国产精品| 男女av免费观看| 久久97视频| 国产成人精品久久二区二区91 | 懂色av一区二区在线播放| 异国色恋浪漫潭| 久久精品九色| 久久久久亚洲精品| 丰满岳乱妇国产精品一区| 一区二区在线电影| 99久久人妻精品免费二区| 亚洲视频狠狠| 久久精品美女| 国产成人a视频高清在线观看| 亚洲色图偷窥自拍| 在线观看不卡的av| 亚洲女爱视频在线| 无码任你躁久久久久久老妇| 伊人色**天天综合婷婷| 99在线视频免费观看| 男女在线视频| 亚洲美女久久久| 国产精品毛片一区视频播| 一区精品在线播放| 日本五十肥熟交尾| 日日夜夜精品视频免费| 亚洲自拍三区| 成人18夜夜网深夜福利网| 韩国美女主播一区| 国产日韩精品在线看| 在线观看av一区| 毛片aaaaa| wwwwxxxxx欧美| 国产无遮挡猛进猛出免费软件| 综合天天久久| 久久亚洲综合网| 亚洲图片小说区| 高清一区二区三区四区五区| 天堂成人在线视频| 欧美日韩一区二区在线视频| 国产又粗又猛又爽又黄的视频小说| 精品中文字幕一区二区| 17c丨国产丨精品视频| 一本久久青青| 91在线播放视频| 3d欧美精品动漫xxxx无尽| 久久激情五月丁香伊人| 日本国产在线观看| 欧美片网站yy| 丁香六月婷婷综合| 亚洲靠逼com| 国产毛片欧美毛片久久久| 国产高清在线观看免费不卡| 欧美一级免费播放| 欧美高清视频手机在在线| 国产视频精品网| 国产一区二区av在线| 国产91精品不卡视频| 黄色在线视频网站| 亚洲网在线观看| 天天射天天操天天干| 欧美性感一类影片在线播放| 欧美黑人猛猛猛| 中文字幕欧美激情一区| 宇都宫紫苑在线播放| 久久亚洲二区| 欧美 国产 综合| 亚洲手机在线| 大地资源网在线观看免费官网| 国内精品久久久久久99蜜桃| 91中文在线观看| 日韩制服一区| 国产99久久精品一区二区 夜夜躁日日躁 | 国产高清亚洲一区| 亚洲一区日韩精品| 日韩精品电影一区亚洲| 欧美视频在线第一页| 日韩在线二区| 亚洲精美视频| 欧美美女视频| 日本一区二区三区免费看| 激情小说亚洲图片| 国产色综合一区二区三区| 美女精品视频在线| 444亚洲人体| 欧洲大片精品免费永久看nba| 国产精品网站大全| 欧美日韩精品免费观看视欧美高清免费大片| 国内精品免费午夜毛片| 在线中文字幕视频观看| 久久最新资源网| 国产婷婷视频在线| 欧美精品免费在线| 色图在线观看| 久久久久久久国产精品视频| 色影视在线观看| 久久精品视频在线播放| 幼a在线观看| 久久激情五月丁香伊人| 网友自拍视频在线| 久久视频在线免费观看| 国产美女在线观看| 欧美激情欧美激情| 国产免费拔擦拔擦8x在线播放| 欧美大片免费看| 呦呦在线视频| 高清欧美性猛交| 樱花草涩涩www在线播放| 97在线视频精品| gay欧美网站| 国产精品一区二区久久国产| 日韩性xxx| 91免费电影网站| theporn国产在线精品| 国产精品乱码视频| 中文精品一区二区| 亚洲精品日韩成人| 中文字幕一区二区三区乱码图片 | 亚洲va欧美va在线观看| www.欧美视频| 高清不卡日本v二区在线| 成人影院中文字幕| 欧美下载看逼逼| 亚洲成人二区| 欧美一级视频免费看| 国产亚洲福利| 污版视频在线观看| 成人国产在线观看| 亚洲精品国产精品国自产网站| 中文字幕免费不卡在线| 一级片一级片一级片| 夜夜揉揉日日人人青青一国产精品| 久久久久久久久精| 色综合久久88色综合天天6| 最好看的日本字幕mv视频大全| 欧美精品在欧美一区二区少妇| 国内精品久久久久久久久久| 日韩欧美三级在线| 男人的天堂在线| 欧美成人在线网站| 偷拍中文亚洲欧美动漫| 91色精品视频在线| 国产a久久精品一区二区三区| 亚洲一区不卡在线| 日韩午夜电影| 中文字幕国产高清| 久久综合九色综合欧美98| 91久久久久久久久久久久久久 | 99re这里只有精品6| 久久久久久国产免费a片| 亚洲免费av高清| 日本久久综合网| 欧美成人a∨高清免费观看| 成人免费在线电影| 国产+成+人+亚洲欧洲| 97久久网站| 精品人伦一区二区三区| 欧美一区二区三区久久精品茉莉花| 国自产拍偷拍精品啪啪一区二区| 免费视频一区二区| 成人网站免费观看| 亚洲一区二区黄色| 91麻豆国产视频| 国产小视频91| 欧美a级在线观看| 99久久99| 亚洲澳门在线| 一区二区三区视频网| 99久久综合色| 欧美精品一级片| 在线播放91灌醉迷j高跟美女| 亚洲aaa在线观看| 久久久久九九九九| 不卡精品视频| 亚洲欧洲国产日韩精品| 久久精品亚洲| 日韩av一二区| 天天射综合影视| 欧美性受xxxx狂喷水| 欧美成aaa人片免费看| 99久久婷婷国产综合精品首页| 国内精品久久国产| 亚洲巨乳在线| 好吊色视频一区二区三区| 亚洲女同女同女同女同女同69| 中文字幕在线2018| 自拍偷拍亚洲一区| 国产极品嫩模在线观看91精品| 久久另类ts人妖一区二区| 一区在线免费| 中文字幕乱码在线| 欧美色播在线播放| 精品无吗乱吗av国产爱色| 992tv成人免费视频| 国产精品任我爽爆在线播放| 一区二区三区免费看| 美女性感视频久久| 精品国产国产综合精品| 在线播放/欧美激情| 久久久久久国产精品免费无遮挡| 国产精品美女免费视频| 精品高清在线| 亚洲一级片av| 亚洲第一狼人社区| 日韩欧美亚洲系列| 国产精品爽爽ⅴa在线观看| 欧美亚洲激情| 日韩av加勒比| 亚洲电影激情视频网站| 婷婷色在线视频| 国产成人亚洲综合| 欧美肥老太太性生活| www.桃色.com| 亚洲一区中文日韩| 色视频在线观看免费| 日本欧美国产在线| 五月久久久综合一区二区小说| 免费在线观看污网站| 亚洲伦在线观看| 色偷偷在线观看| 国产精品老女人视频| 香蕉综合视频| 五十路六十路七十路熟婆| 色琪琪一区二区三区亚洲区| 欧美人体大胆444www| 国产精品美乳一区二区免费| 国产亚洲一区| 一级片黄色免费| 精品久久久久久国产91| 欧美白人做受xxxx视频| 国产日韩欧美在线| 激情婷婷欧美| 久久久久久久久福利| 制服丝袜国产精品| 成人美女视频| 中文字幕一区二区三区有限公司| 国产成人8x视频一区二区 | 国产一区二区高清| 东京热无码av男人的天堂| 日韩欧美一级特黄在线播放| 中文字幕在线观看网站| 精品久久精品久久| 精品一区二区国语对白| 国产精品19乱码一区二区三区| 亚洲免费一在线| 欧美一级大片在线视频| 欧美亚洲日本一区二区三区| 久久精品在线免费观看| 国产毛片在线视频| 国产成一区二区| 亚洲性感美女99在线|