国产精品欧美经典_亚洲欧美日韩国产手机在线_欧美日韩裸体免费视频_欧美成人精品高清在线播放

曹操讀書--知行合一,化于無形

如何實現一個牛逼的Java本地緩存?這些思路你需要了解

作者 :千鋒武漢 2020-12-21 16:50:09 審稿人 : admin 圍觀 : 評論

最近在看Mybatis的源碼,剛好看到緩存這一塊,Mybatis提供了一級緩存和二級緩存。一級緩存相對來說比較簡單,功能比較齊全的是二級緩存,基本上滿足了一個緩存該有的功能。當然如果拿來和專門的緩存框架如ehcache來對比可能稍有差距。TOP曹操讀書網

本文千鋒武漢Java小編將來整理一下實現一個本地緩存都應該需要考慮哪些東西?一起往下看吧。TOP曹操讀書網

30.jpgTOP曹操讀書網

一、考慮點TOP曹操讀書網

考慮點主要在數據用何種方式存儲,能存儲多少數據,多余的數據如何處理等幾個點,下面小編來詳細的介紹每個考慮點,以及該如何去實現。TOP曹操讀書網

1.數據結構TOP曹操讀書網

首要考慮的就是數據該如何存儲,用什么數據結構存儲,最簡單的就直接用Map來存儲數據。或者復雜的如redis一樣提供了多種數據類型哈希,列表,集合,有序集合等,底層使用了雙端鏈表,壓縮列表,集合,跳躍表等數據結構。TOP曹操讀書網

2.對象上限TOP曹操讀書網

因為是本地緩存,內存有上限,所以一般都會指定緩存對象的數量比如1024,當達到某個上限后需要有某種策略去刪除多余的數據。TOP曹操讀書網

3.清除策略TOP曹操讀書網

上面說到當達到對象上限之后需要有清除策略,常見的比如有LRU(最近最少使用)、FIFO(先進先出)、LFU(最近最不常用)、SOFT(軟引用)、WEAK(弱引用)等策略。TOP曹操讀書網

4.過期時間TOP曹操讀書網

除了使用清除策略,一般本地緩存也會有一個過期時間設置,比如redis可以給每個key設置一個過期時間,這樣當達到過期時間之后直接刪除,采用清除策略+過期時間雙重保證。TOP曹操讀書網

5.線程安全TOP曹操讀書網

像redis是直接使用單線程處理,所以就不存在線程安全問題。而我們現在提供的本地緩存往往是可以多個線程同時訪問的,所以線程安全是不容忽視的問題。并且線程安全問題是不應該拋給使用者去保證。TOP曹操讀書網

6.簡明的接口TOP曹操讀書網

提供一個傻瓜式的對外接口是很有必要的,對使用者來說使用此緩存不是一種負擔而是一種享受。提供常用的get,put,remove,clear,getSize方法即可。TOP曹操讀書網

7.是否持久化TOP曹操讀書網

這個其實不是必須的,是否需要將緩存數據持久化看需求。本地緩存如ehcache是支持持久化的,而guava是沒有持久化功能的。分布式緩存如redis是有持久化功能的,memcached是沒有持久化功能的。TOP曹操讀書網

8.阻塞機制TOP曹操讀書網

在看Mybatis源碼的時候,二級緩存提供了一個blocking標識,表示當在緩存中找不到元素時,它設置對緩存鍵的鎖定。這樣其他線程將等待此元素被填充,而不是命中數據庫。其實我們使用緩存的目的就是因為被緩存的數據生成比較費時,比如調用對外的接口,查詢數據庫,計算量很大的結果等等。這時候如果多個線程同時調用get方法獲取的結果都為null,每個線程都去執行一遍費時的計算,其實也是對資源的浪費。最好的辦法是只有一個線程去執行,其他線程等待,計算一次就夠了。但是此功能基本上都交給使用者來處理,很少有本地緩存有這種功能。TOP曹操讀書網

二、如何實現TOP曹操讀書網

以上大致介紹了實現一個本地緩存我們都有哪些需要考慮的地方,當然可能還有其他沒有考慮到的點。下面繼續看看關于每個點都應該如何去實現,重點介紹一下思路。TOP曹操讀書網

1.數據結構TOP曹操讀書網

本地緩存最常見的是直接使用Map來存儲,比如guava使用ConcurrentHashMap,ehcache也是用了ConcurrentHashMap,Mybatis二級緩存使用HashMap來存儲:TOP曹操讀書網

Map cache = new ConcurrentHashMap()Mybatis使用HashMap本身是非線程安全的,所以可以看到起內部使用了一個SynchronizedCache用來包裝,保證線程的安全性。 ?TOP曹操讀書網

當然除了使用Map來存儲,可能還使用其他數據結構來存儲,比如redis使用了雙端鏈表,壓縮列表,整數集合,跳躍表和字典。當然這主要是因為redis對外提供的接口很豐富除了哈希還有列表,集合,有序集合等功能。TOP曹操讀書網

2.對象上限TOP曹操讀書網

本地緩存常見的一個屬性,一般緩存都會有一個默認值比如1024,在用戶沒有指定的情況下默認指定。當緩存的數據達到指定最大值時,需要有相關策略從緩存中清除多余的數據這就涉及到下面要介紹的清除策略。TOP曹操讀書網

3.清除策略TOP曹操讀書網

配合對象上限之后使用,場景的清除策略如:LRU(最近最少使用)、FIFO(先進先出)、LFU(最近最不常用)、SOFT(軟引用)、WEAK(弱引用)。TOP曹操讀書網

LRU:Least RecentlyTOP曹操讀書網

Used的縮寫最近最少使用,移除最長時間不被使用的對象。常見的使用LinkedHashMap來實現,也是很多本地緩存默認使用的策略。TOP曹操讀書網

FIFO:先進先出,按對象進入緩存的順序來移除它們。常見使用隊列Queue來實現。TOP曹操讀書網

LFU:Least FrequentlyTOP曹操讀書網

Used的縮寫大概也是最近最少使用的意思,和LRU有點像。區別點在LRU的淘汰規則是基于訪問時間,而LFU是基于訪問次數的。可以通過HashMap并且記錄訪問次數來實現。TOP曹操讀書網

SOFT:軟引用基于垃圾回收器狀態和軟引用規則移除對象。常見使用SoftReference來實現。TOP曹操讀書網

WEAK:弱引用更積極地基于垃圾收集器狀態和弱引用規則移除對象。常見使用WeakReference來實現。TOP曹操讀書網

4.過期時間TOP曹操讀書網

設置過期時間,讓緩存數據在指定時間過后自動刪除。常見的過期數據刪除策略有兩種方式:被動刪除和主動刪除。TOP曹操讀書網

被動刪除:每次進行get/put操作的時候都會檢查一下當前key是否已經過期,如果過期則刪除,類似如下代碼:TOP曹操讀書網

?image.pngTOP曹操讀書網

主動刪除:專門有一個job在后臺定期去檢查數據是否過期,如果過期則刪除,這其實可以有效的處理冷數據。TOP曹操讀書網

5.線程安全TOP曹操讀書網

盡量用線程安全的類去存儲數據,比如使用ConcurrentHashMap代替HashMap。或者提供相應的同步處理類,比如Mybatis提供了SynchronizedCache:TOP曹操讀書網

?image.pngTOP曹操讀書網

6.簡明的接口TOP曹操讀書網

提供常用的get,put,remove,clear,getSize方法即可,比如Mybatis的Cache接口:TOP曹操讀書網

?image.pngTOP曹操讀書網

再來看看guava提供的Cache接口,相對來說也是比較簡潔的:TOP曹操讀書網

?image.pngTOP曹操讀書網

7.是否持久化TOP曹操讀書網

持久化的好處是重啟之后可以再次加載文件中的數據,這樣就起到類似熱加載的功效。比如ehcache提供了是否持久化磁盤緩存的功能,將緩存數據存放在一個.data文件中。TOP曹操讀書網

?image.pngTOP曹操讀書網

redis更是將持久化功能發揮到極致,慢慢的有點像數據庫了。提供了AOF和RDB兩種持久化方式。當然很多情況下可以配合使用兩種方式。TOP曹操讀書網

8.阻塞機制TOP曹操讀書網

除了在Mybatis中看到了BlockingCache來實現此功能,之前在看<>的時候其中有實現一個很完美的緩存,大致代碼如下:TOP曹操讀書網

?image.pngTOP曹操讀書網

compute是一個計算很費時的方法,所以這里把計算的結果緩存起來,但是有個問題就是如果兩個線程同時進入此方法中怎么保證只計算一次,這里最核心的地方在于使用了ConcurrentHashMap的putIfAbsent方法,同時只會寫入一個FutureTask。TOP曹操讀書網

總結TOP曹操讀書網

本文大致介紹了要設計一個本地緩存都需要考慮哪些點:數據結構,對象上限,清除策略,過期時間,線程安全,阻塞機制,實用的接口,是否持久化。當然肯定有其他考慮點,歡迎補充。TOP曹操讀書網

想了解更多Java方面的知識,你可以關注“千鋒武漢”公眾號,定期發布技術熱點和行業趨勢分析,助力你快速入職。TOP曹操讀書網

核心關鍵字: 人工智能 大數據 移動互聯網

相關文章

  • 美團會員成“韭菜”,大數據殺熟是如何收割用戶的?
    美團會員成“韭菜”,大數據殺熟是如何收割用戶的?

    圖片來源@視覺中國文|連線Insight,作者|王古鋒,編輯|子夜要說今年的行業亂象,大數據殺熟榜上有名:OTA平臺上,兩部不一樣的手機同時預定酒店房間,經常使用該平臺的手機的房價高,另一部新號碼手機房價低;?電商平臺上,購買一款kindle產品,瀏覽該產品次數更多的人顯示價格為998元,瀏覽次數少的用戶顯示的價格卻只有599元......像這樣的案例不勝枚舉,可以說國內各大互聯網平臺已經陷入了大...

    2020-12-20 15:51:13
  • 實現輿情數據價值最大化 需要發揮三個想象力
    實現輿情數據價值最大化 需要發揮三個想象力

    在互聯網大數據的推動下,輿情工作出現重大變化與進步,但也面臨新的挑戰。如何挖掘輿情大數據的價值,需要充分發揮三個想象力。...

    2020-12-19 14:52:07
  • 美團割會員韭菜,大數據殺熟為何屢禁不絕?
    美團割會員韭菜,大數據殺熟為何屢禁不絕?

    文丨王新喜日前,一篇《我被美團會員割了韭菜》的文章把美團頂上了熱搜。在筆者看來,平臺商業模式與利益決定了部分互聯網APP殺熟難以避免,要防范這些平臺殺熟,應對方法只有想辦法成為平臺的“非忠誠度用戶”才可以。文章中作者表示,在美團的同一家店鋪,同一個配送地址,在同樣的時間點單,會員賬號的配送費是6元,而非會員賬號僅為2元。該用戶表示,本以為開通了會員省錢,哪知會員比非會員的配送費高出1~5元。作者表...

    2020-12-19 13:50:47
  • 好看的女生臉怎么捏?賽博朋克2077捏臉數據女
    好看的女生臉怎么捏?賽博朋克2077捏臉數據女

    今天賽博朋克2077正式解鎖,很多玩家都進入了游戲體驗,游戲可以自由捏臉,問題來了,好看的女生臉怎么捏?小編我特意整理了相關的資訊,接下來就跟著我一起來看看賽博朋克2077捏臉數據女吧。[!--empirenews.page--]今天賽博朋克2077正式解鎖,很多玩家都進入了游戲體驗,游戲可以自由捏臉,問題來了,好看的女生臉怎么捏?小編我特意整理了相關的資訊,接下來就跟著我一起來看看賽博朋克2077捏臉數據女吧。[!--empirenews.page--]今天賽博朋克2077正式解鎖,...

    2020-12-19 06:50:04
  • 七夜公布玄律游戲數據“造假”?52萬充值說32萬,阿哲大怒要凍結全體心悅主播
    七夜公布玄律游戲數據“造假”?52萬充值說32萬,阿哲大怒要凍結全體心悅主播

    這兩天YY神豪七夜哥與心悅玄律之間的節奏不斷,引發許多粉絲對七夜哥不滿。玄律上頭條喊七夜哥,七夜沒去還生氣,導致阿哲召集心悅的頭部主播開了一個小會,并且對玄律進行了一番批評。但是這件事后,玄律及心悅的一些粉絲,對于七夜哥的意見更大了,有粉絲表示七夜哥有 虧欠 玄律。而這件事情之后,很多外公會的粉絲不斷帶節奏,而七夜也是接連在兩天的直播中對此事進行了回應。七夜直言,自己并非是心悅公會的 家長 ,對于這個身份自己是不承認的。現在YY上關于七夜有很多節奏,因此他也必須要把這事情說清楚,這 鍋 他背不起。隨后,七...

    2020-12-18 20:47:13
  • 主播神豪低頭道歉,引發YY與虎牙粉絲撕逼,都看不上對方攀比數據
    主播神豪低頭道歉,引發YY與虎牙粉絲撕逼,都看不上對方攀比數據

    近日,虎牙直播平臺出現主播給神豪道歉的事件。因為前YY主播白浩及大哥青蛙哥,在虎牙遭受神豪君子固窮等神豪團體的打壓,為求 生存 低頭道歉成功上岸。之后一些虎牙水友開始嘲諷YY直播平臺的前主播及神豪低頭道歉,從而引發不少YY的粉絲不滿。于是乎雙方粉絲展開了一場 比拼 大賽,開始 攀比 兩個直播平臺的數據,究竟誰才是大哥。首先是YY這邊,虎牙許多的水友前來 挑釁 ,說虎牙直播的人氣、神豪、主播遠超YY什么的。還說從YY出來的主播白浩及神豪青蛙哥給虎牙神豪道歉,太給YY丟面子了。總之,從虎牙一些水友的討論,似乎...

    2020-12-18 14:50:02
  • 知乎發布十年用戶數據報告:2.4 億回答匯聚好奇與新知
    知乎發布十年用戶數據報告:2.4 億回答匯聚好奇與新知

    近日,知乎發布“我的知乎十年歷”用戶數據報告。報告顯示,成立十年以來,知乎已經積累了超過4400萬個問題和2.4億個回答。此外,報告還展示了用戶在知乎的十年創作和成長足跡。經過十年發展,知乎已成長為一個綜合性內容平臺,產品功能更加豐富,產出內容更加多元。“我的知乎十年歷”記錄了知乎十年發展的多個里程碑:2011年1月26日正式上線,2013年正式開放注冊,2017年9月用戶突破1億大關,2019年...

    2020-12-18 13:08:13
  • 看到這個數據,中國人都笑了,美國得吐血!
    看到這個數據,中國人都笑了,美國得吐血!

    原創:占豪來源公眾號:占豪微信ID:zhanhao668有些事情,就是人算不如天算。特朗普這幾年,算計中國多少?簡直是罄竹難書!特朗普2017年上臺,通過大力減稅刺激了經濟增長,爾后借助經濟數據階段性向好的時機,在2018年向中國發起貿易戰。特朗普的本意是,在美國力量最強的時候制服中國。然而,讓特朗普沒想到的是,中國的經濟實力會那么強,韌勁會那么足,美國對中國無可奈何,最后不得不兩次打電話到北京復談。2020年,新冠疫情在武漢率先被發現和報告,結果美國對中國落井下石,第一宣布從武漢撤離總領館,同時宣布與中...

    2020-12-18 09:48:47
  • 生活服務業招聘大數據:美容師發型師招聘求職兩旺
    生活服務業招聘大數據:美容師發型師招聘求職兩旺

    近日, 58同城發布今年1月-10月生活服務業招聘求職大數據。數據顯示,深圳招聘求職需求大,美容師、發型師招聘求職供需兩旺,行業平均支付月薪6680元;95后求職者占比高,達到25.73%。...

    2020-12-11 15:53:29
  • 水滴公司合伙人兼CTO邱慧談ABDC戰略打法:數據形成壁壘,AI賦能產業
    水滴公司合伙人兼CTO邱慧談ABDC戰略打法:數據形成壁壘,AI賦能產業

    【獵云網北京】12月7日報道(文/尹子璇、呂鑫燚)12月2日,在逆勢生長-NFS2020年度CEO峰會暨獵云網創投頒獎盛典上,水滴公司合伙人兼CTO邱慧發表了《科技賦能下的大健康產業新基建》主題演講。在演講中,邱慧詳細講述了作為中國領先的互聯網健康保障平臺,水滴公司是如何基于對大健康行業的理解,在ABDC的戰略下,通過技術賦能大健康產業,從而實現線上化、流程化、數據化和智能化的。整體來說,A指的是...

    2020-12-09 17:52:27
留言與評論(共有 0 條評論)
   
驗證碼:
主站蜘蛛池模板: 亚洲精品成人久久久998| 在线观看日本一区| 深夜福利一区二区| 久久亚洲欧美日韩精品专区| 国产精品美女主播| 欧美欧美一区二区| 一区不卡视频| 久久久亚洲影院| 日韩三级在线播放| 国产成人亚洲综合青青| 国产熟人av一二三区| 欧美日韩国产999| 色婷婷精品国产一区二区三区| 高清一区二区三区视频| 国产一区二区视频在线免费观看| 日韩美女中文字幕| 亚洲欧洲日本国产| 伊人天天久久大香线蕉av色| 国产精品成人播放| 国产精品一区二区av| 韩国国内大量揄拍精品视频| 欧美综合国产精品久久丁香| 91久久久久久| 99视频精品全部免费看| 国语自产精品视频在免费| 久久精品视频在线播放| 欧美激情一级欧美精品| 日本久久久久亚洲中字幕| 亚洲欧美精品在线观看| 一区二区三区四区欧美日韩| 国产精品久久久久久久天堂| 国产视频不卡| 国产精品久久久久久av| 国产精品美女在线播放| 91久热免费在线视频| 亚洲a级在线播放观看| 亚洲a一级视频| 亚洲最大av网| 午夜精品一区二区在线观看| 亚洲AV无码成人精品一区| 色天天综合狠狠色|