精品欧美一区二区三区在线观看 _久久久久国色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电影| 欧美精品国产一区二区| 欧美日韩视频一区二区| 日本丰满少妇黄大片在线观看| 性一交一乱一精一晶| 久久精品女人天堂| 久久国产精品久久久久| 玖草视频在线观看| 亚洲男女网站| 色婷婷综合中文久久一本| 亚洲午夜精品久久久久久浪潮| 99在线精品视频免费观看软件 | 亚洲欧美制服综合另类| 午夜天堂在线视频| 国模套图日韩精品一区二区| ...中文天堂在线一区| 精品国产乱码久久久久久久软件| 在线观看免费视频a| 国产视频一区在线观看一区免费| 色哟哟入口国产精品| 亚洲一区二区三区无码久久| 疯狂欧洲av久久成人av电影| 91福利在线观看| 无码粉嫩虎白一线天在线观看 | 国内外成人免费在线视频| caoporn-草棚在线视频最| 国产精品卡一卡二| 欧美一级日本a级v片| 老熟妇高潮一区二区高清视频| 久久福利资源站| 国产成人精品a视频一区www| 日产精品久久久久| 欧美~级网站不卡| 日韩在线免费av| 在线观看国产精品一区| 亚洲国产精品嫩草影院久久av| 日韩亚洲欧美高清| 天天操天天干天天做| 99精品国自产在线| 欧美午夜视频一区二区| 青青青国产在线观看| 日本一本在线免费福利| 亚洲人成影院在线观看| 神马一区二区影院| 黄色大片在线看| 91美女在线视频| 国产欧美一区二区三区不卡高清| 99热这里只有精品在线| 国产精品一色哟哟哟| 91九色蝌蚪国产| 国产欧美日韩综合精品一区二区三区| 免费美女久久99| 国产精品免费久久久久久| 亚洲国产成人精品女人久久| 欧美资源在线| 国产成人av网| 亚洲熟妇无码久久精品| 毛片av一区二区| 国产精自产拍久久久久久| 免费精品一区二区| 麻豆高清免费国产一区| 成人一区二区电影| av av片在线看| 国产mv日韩mv欧美| 国内精品二区| 免费黄色片在线观看| 欧美国产日产图区| japanese在线视频| 欧美日韩经典丝袜| 精品久久久久久久中文字幕| 国产成人精品视频免费看| 国产资源在线观看入口av| 精品久久久久久久久中文字幕| 久久久久久久激情| 成人在线观看免费播放| 这里是久久伊人| 性感美女一区二区三区| 三级精品视频| 中文日韩在线观看| 538精品在线观看| 99国产精品久久久久久久成人热| 欧美一级视频在线观看| 中文字幕人成人乱码亚洲电影| 国产主播一区二区| 国产尤物91| lutube成人福利在线观看| 亚洲日本一区二区三区| 久久久久久免费看| 精品裸体bbb| 日韩欧美高清dvd碟片| 黄色片视频免费观看| 久久中文字幕av一区二区不卡| 欧美另类xxx| 无码任你躁久久久久久久| 国产老女人精品毛片久久| 激情小说综合区| 麻豆av在线导航| 欧美日韩国产一区二区| 爱豆国产剧免费观看大全剧苏畅| 国产图片一区| 少妇久久久久久| 精品在线播放视频| 国产综合色视频| 欧美日韩亚洲在线| 男人天堂亚洲| 欧美日韩高清一区二区不卡| 久久人妻少妇嫩草av无码专区| 日韩a一区二区| 91国内免费在线视频| 97在线视频人妻无码| 久久婷婷国产综合国色天香| 日韩国产小视频| 国产精品诱惑| 亚洲精品一区二区三区不| 欧美成人精品欧美一| 麻豆精品在线视频| 久久资源亚洲| 国产免费拔擦拔擦8x高清在线人 | 亚洲一区在线播放| 中文字幕亚洲欧洲| 欧美精品一区二区三区中文字幕| 欧美高清不卡在线| 国产又黄又粗又硬| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产精品美女免费| 青青草观看免费视频在线| 亚洲在线视频免费观看| 亚洲欧美日本一区二区| 欧美aaaa视频| 国产精品丝袜高跟| 国产高清av在线| 色婷婷av一区二区三区大白胸| 中文字幕乱码一区| 一区三区视频| 国产精品久久久久久久久久久久午夜片 | 99久久夜色精品国产网站| 久久久久久久香蕉| 日韩成人精品| 欧美激情精品久久久久久蜜臀 | 国产一区不卡精品| 亚洲欧美国产不卡| 成人全视频免费观看在线看| 亚洲人成电影网站色| 91国产丝袜播放在线| 成人免费高清在线观看| aa视频在线播放| 日韩精品免费一区二区三区竹菊| 91精品国产91久久久久久吃药| 国产91免费在线观看| 亚洲午夜羞羞片| 国产草草浮力影院| 国产精品一级| 欧美一区二区综合| 日本精品在线中文字幕| 中文字幕精品视频| 国产精品无码天天爽视频| 亚洲欧美在线aaa| 欧美一级大片免费看| 在线精品观看| 久久亚裔精品欧美| 欧美最新精品| xxxx性欧美| 精品久久久久久亚洲综合网站| 一区二区三区鲁丝不卡| 亚洲国产精品狼友在线观看| a91a精品视频在线观看| 日韩国产精品一区二区三区| 九九久久国产| 欧美精品中文字幕一区| 欧美一级性视频| 色综合久久九月婷婷色综合| 性欧美一区二区| 精品一区二区三区影院在线午夜| av中文字幕av| 奇米影视777在线欧美电影观看| 国产成人精品免费视频| 男人在线资源站| 欧美va亚洲va在线观看蝴蝶网| 日韩成人一区二区三区| 国产女人水真多18毛片18精品视频| xxx国产在线观看| 欧美区日韩区| 日本亚洲欧洲精品| 亚洲精选av| 国产精品99蜜臀久久不卡二区| 超碰porn在线| 亚洲免费视频在线观看| 91国产免费视频| 五月婷婷激情综合| 国产aaaaaaaaa| 成人做爰69片免费看网站| 国产精品免费观看久久| 99久久亚洲精品| 久久99精品久久久久久水蜜桃| 国产精成人品2018| 性欧美暴力猛交69hd| 在线免费看黄| 亚洲免费人成在线视频观看| 99在线观看免费| 欧美伊人久久久久久久久影院| 久久久美女视频| 国产精品污www在线观看| 日韩女优在线视频| 久久99精品久久只有精品| 免费成人在线视频网站| 五月天久久网站| 欧美日韩在线精品一区二区三区| 久久av网站| 国产精品视频地址| 欧美艳星kaydenkross| 欧美国产日本在线| 看女生喷水的网站在线观看| 亚洲欧美福利视频| 日韩在线视频第一页| 制服.丝袜.亚洲.另类.中文| 国产情侣小视频| 欧美视频一二三| 日本免费观看视| 亚洲在线视频一区| 欧美成人精品激情在线视频| 国产精品久久久一区麻豆最新章节| 亚洲综合网在线观看| 成人高清在线视频| 日本中文字幕精品| 国产一区二三区| 日韩欧美亚洲另类| 久久精品999| 亚洲一区在线不卡| 石原莉奈一区二区三区在线观看| 欧美在线一区视频| 在线成人h网| 欧美人成在线观看| 国产精品激情电影| 久久这里只有精品8| 亚洲欧美综合久久久| 中文字幕不卡每日更新1区2区| 成人免费a**址| 五月天国产一区| 第一sis亚洲原创| 天堂av一区二区| 欧美日韩国产传媒| 亚洲永久激情精品| 999国产精品| 黄色www在线观看| 香蕉综合视频| 久久av高潮av| 最新国产乱人伦偷精品免费网站| 久久久久久久久久网| 亚洲久久一区| 精品国产免费av| 久久一区中文字幕| 五月天亚洲视频| 精品一区二区免费在线观看| 狠狠干狠狠操视频| 国产精品香蕉一区二区三区| 91丨porny丨九色| 国产91精品精华液一区二区三区 | 久久你懂得1024| 亚洲码无人客一区二区三区| 国产三级欧美三级日产三级99| 九九九视频在线观看| 中文字幕日韩精品一区| 91aaa在线观看| 亚洲va国产va欧美va观看| 好吊操这里只有精品| 欧美亚洲动漫另类| 国产情侣一区二区| 亚洲成人久久久| 国产资源在线看| 久久电影一区二区| 超碰99在线| 国产精品久久久久久av下载红粉| 疯狂欧洲av久久成人av电影 | 欧美视频一二区| 亚洲社区在线观看| 久久综合之合合综合久久| 欧美日韩电影在线观看| 亚洲同志男男gay1069网站| 国产精品www色诱视频| 国产成人免费av一区二区午夜| 国产欧美日韩综合精品二区| 操欧美老女人| 日本免费a视频| 日韩高清国产一区在线| 黑人无套内谢中国美女| 久久综合九色综合97婷婷| 黄色录像免费观看| 亚洲v精品v日韩v欧美v专区 | 日韩欧美三级在线| 欧美日韩激情视频一区二区三区| 久久精品视频导航| 亚洲欧美小说色综合小说一区| 国产日韩在线免费| 鲁大师精品99久久久| 中文字幕一区二区三区乱码| 国产日本精品| 欧美69精品久久久久久不卡 | 日韩av在线一区二区| 欧美三级电影一区二区三区| 国外成人性视频| 国产95亚洲| 日韩欧美99| 亚洲免费观看| 欧美色图校园春色| 欧美极品少妇xxxxⅹ高跟鞋| 国产真实夫妇交换视频| 欧美日韩一区二区在线观看| 五月天婷婷在线播放| 欧美精品午夜视频| 日韩专区视频| 日韩av高清| 一区二区三区四区五区精品视频 | 日本三级免费观看| 夫妻av一区二区| 色在线观看视频| 欧美写真视频网站| 欧美日韩激情视频一区二区三区| 欧美激情三级免费| 国产精品亚洲欧美日韩一区在线| 亚洲高清资源综合久久精品| 国产精品久久久亚洲一区| 国产乱淫av片| 亚洲欧美日韩电影| 亚洲综合免费视频| 夜夜嗨av一区二区三区四区| 色偷偷偷在线视频播放| 国产在线一区二区三区播放| 欧美日韩国产精品一区二区亚洲| 亚洲一区二区三区四区精品| 国产精品久久久久一区| 制服丝袜在线一区| 国产一区二区三区丝袜| 在线视频超级| 欧美污视频久久久| 亚洲一区国产| 国产女主播喷水高潮网红在线| 五月婷婷欧美视频| 性感美女一级片| 欧美性一区二区三区| 色老板在线视频一区二区| 欧美久久久久久久久久久久久| 成人妖精视频yjsp地址| 麻豆一区二区三区精品视频| 日韩美女视频在线| 蜜臀av在线播放| 国产亚洲一区在线播放| 亚洲片区在线| 日韩精品卡通动漫网站| 欧美午夜激情视频| 国产综合在线观看| 国产日本欧美一区二区三区| 91欧美日韩| 1314成人网| 亚洲一级二级在线| 午夜av免费观看| 日本久久久久久久久| 欧美精品一区二区久久| 在线免费黄色网| 一级做a爱片久久| 午夜视频福利在线| 国产精品电影久久久久电影网| 日韩av在线播放网址| 四川一级毛毛片| 午夜免费久久看| 国产理论电影在线观看| 91久久国产精品| 亚洲激情黄色| 超薄肉色丝袜一二三| 91精品国产综合久久久久久久久久 | 福利成人在线观看| 91精品国产自产在线| 好看的亚洲午夜视频在线| 男女一区二区三区| 欧美午夜理伦三级在线观看| 免费大片在线观看www| 国产伦精品一区二区三区| 久久亚洲综合| 欧美视频www| 日韩毛片中文字幕| 亚洲免费看片| 99999精品视频| 亚洲欧美日韩综合aⅴ视频| 天堂av资源网| 国产精品永久免费观看| 亚洲精品资源| 午夜三级在线观看| 亚洲精品中文字幕av| 国产精品18| 国产真实乱子伦| 一区二区三区国产| h视频网站在线观看| 99精彩视频在线观看免费| 久久一区二区三区超碰国产精品| 日韩欧美123区| 亚洲一区二区国产| 国产欧美啪啪| 国产xxxxhd| 精品视频在线免费| 亚洲国产欧美日本视频| 国产一二三四区在线观看|