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

Java開發利器之Guava Cache

開發 前端
Guava Cache是一個相對比較簡單并且容易理解的本地緩存框架,今天主要以此為開端來認識并學習如何使用緩存.

前言

緩存技術被認為是減輕服務器負載、降低網絡擁塞、增強Web可擴展性的有效途徑之一,其基本思想是利用客戶訪問的時間局部性(Temproral Locality)原理, 將客戶訪問過的內容在Cache中存放一個副本,當該內容下次被訪問時,不必連接到駐留網站,而是由Cache中保留的副本提供。

在企業Web應用中,通過緩存技術能夠提高請求的響應速度;減少系統IO開銷;降低系統數據讀寫壓力...

緩存的意義

首先我們要知道,在我們開發過程中,為什么要使用緩存,緩存能夠為我們帶來哪些好處!

優點

  • 通過緩存承載系統壓力,減少對系統或網絡資源訪問而引起的性能消耗,在流量較大時能夠很好地減少系統擁塞。
  • 緩存一般都是使用存取非常快的組件實現,通過緩存能夠快速響應客戶端請求,從而降低客戶訪問延遲,提審系統響應速度。
  • 在配備負載均衡的應用架構中,通過緩存靜態資源能夠有效減少服務器負載壓力。
  • 當下游應用故障時,通過返回緩存數據能夠在一定程度上增強應用容錯性。

缺點

  • 緩存數據與實際數據不一致問題問題。
  • 高并發場景時存在緩存擊穿、緩存穿透、緩存雪崩等問題。

總的來說,緩存主要是針對高頻訪問但低頻更新的數據,從而加快服務器響應與原資源訪問壓力。

Guava Cache是一個相對比較簡單并且容易理解的本地緩存框架,今天主要以此為開端來認識并學習如何使用緩存。

Guava Cache特色

本地緩存我們可以簡單的理解為Map,將數據保存到Map(內存)中,下次使用該數據時,通過key直接從Map中取即可。但是使用Map會有一些幾個問題需要考慮:

  • 緩存的容量。不可能無限制的對數據進行緩存,當數據較大時占用系統資源會導致主業務受影響。
  • 緩存的清理。有些緩存使用頻率很低,如果一直占用資源也是一種浪費。
  • 并發訪問時的效率問題。緩存更新時瞬時對系統、網絡資源的訪問導致故障。
  • 緩存使用情況評估

當然以上問題我們通過我們對Map包裝下即可實現,當然Guava Cache也就是基于這種思想,底層原理則是基于Map實現,我們看下其有哪些特色:

  • 緩存過期和淘汰機制

通過設置Key的過期時間,包括訪問過期和創建過期;設置緩存容量大小,采用LRU的方式,選擇最近最久的緩存進行刪除。

  • 并發處理能力

Cache主要基于CurrentHashMap實現線程安全;通過對key的計算,基于分段鎖,提高緩存讀寫效率,降低鎖的粒度,提升并發能力。

  • 更新鎖定

在緩存中查詢某個key,如果不存在,則查源數據,并回填緩存。在高并發下會出現,多次查詢元數據并重復回填緩存,可能會造成系統故障,最明顯的DB服務器宕機,性能下降等。GuavaCache通過在CacheLoader調用load方法時,對同一個key同一時刻只會有一個請求去讀源數據并回填緩存,后面的請求則直接繼續從緩存讀取,有效阻斷并發請求對資源服務的影響。

  • 集成數據源

一般我們在業務中操作緩存,都會操作緩存和數據源兩部分GuavaCache的get可以集成數據源,在從緩存中讀取不到時可以從數據源中讀取數據并回填緩存。

  • 監控統計

監控緩存加載次數、命中率、失誤率以及數據加載時長等。

API介紹

  • 緩存構建

ManualCache此時Cache相當于一個Map,對數據進行CRUD操作時,需要同步操作緩存Map; 高并發情況時,可以使用get(k,loader)讀緩存,通過Cache鎖機制,防止對系統資源(DB)的并發訪問 通過put方法實現緩存的存入與更新;

  • LoadingCache

此時構建的是一個實現了Cache接口的LoadingCache,相比ManualCache,提供了緩存回填機制,即當緩存不存在時,會基于CacheLoader查詢數據并將結果回填到緩存, 在高并發時,可以有效地基于緩存鎖減少對系統資源的調用。此時僅需要關注緩存的使用,緩存的更新與存入都是基于CacheLoader實現;

  • 緩存獲取

get(k)

根據key查詢,沒有則觸發load;如果load為空則拋出異常。

getUnchecked(k)

緩存不存在或返回為null會拋出檢查異常。

get(k,loader)

根據key查詢,沒有則調用loader方法,且對結果緩存;如果loader返回null則拋出異常,此時不會調用默認的load方法。

getIfPresent(k)

有緩存則返回,否則返回null,不會觸發load。

  • 緩存更新

put(k,v)

如果緩存已經存在,則會先進行一次刪除。

  • 緩存刪除

invalidate(k)

根據key使緩存失效。

過期

通過配置的過期參數,比如expireAfterAccess、expireAfterWrite、refreshAfterWrite。

過載

當緩存數據量超過設置的最大值時,根據LRU算法進行刪除。

引用

構建緩存時將鍵值設置為弱引用、軟引用,基于GC機制來清理緩存。

  • 統計

hitRate()

緩存命中率;

hitMiss()

緩存失誤率;

loadCount() 加載次數;

averageLoadPenalty()

加載新值的平均時間,單位為納秒;

evictionCount() 緩存項被回收的總數,不包括顯式清除。

Builder配置

配置

描述

expireAfterAccess

多久沒有讀寫則過期

expireAfterWrite

寫入后多久沒更新自動過期,先刪除,后load

refreshAfterWrite

上一次更新后多久自動刷新,先reload后刪除,并發時會取到老的數據

removalListener

設置緩存刪除監聽

initialCapacity

緩存初始化大小

concurrencyLevel

最大的并發數,可以理解為并發線程數量

maximumSize

最大緩存數量,超過時會根據策略清除

maximumWeight

最大權重容量數,僅用于確定緩存是否超過容量

recordStats

緩存命中統計

簡單示例

  • ManualCache模式

下面以用戶服務為例,我們看下如何在增刪改查方法中使用緩存:

private Cache<String, User> cache = CacheBuilder.newBuilder()
.expireAfterWrite(3, TimeUnit.SECONDS)//寫入多久沒更新自動過期,先刪除,后load
.removalListener(new RemovalListener<Object, Object>() {
@Override
public void onRemoval(RemovalNotification<Object, Object> notification) {
LOGGER.info("{} remove {}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),notification.getKey());
}
})
.initialCapacity(20) //初始化容量
.concurrencyLevel(10) // 并發
.maximumSize(100) //最多緩存數量
.recordStats() // 開啟統計
.build();

@Override
public User getUser(String id){
// 緩存不存在時,通過LocalCache鎖機制,防止對數據庫的高頻訪問
User user;
try {
user = cache.get(id,()-> {
LOGGER.info("緩存不存在,從loader加載數據");
return userDao.get(id);
});
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
return user;
}

@Override
public User saveOrUpdateUser(User user){
userDao.saveOrUpdate(user);
cache.put(user.getId(),user);
return user;
}

@Override
public void removeUser(String id){
userDao.remove(id);
cache.invalidate(id);
}
  • LoadingCache模式
private LoadingCache<String, User> cache = CacheBuilder.newBuilder()
// 省略
.build(new CacheLoader<String, User>() {
@Override
public User load(String key) throws Exception {
LOGGER.info("{} load {}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),key);
return userDao.get(key);
}

@Override
public ListenableFuture<User> reload(String key, User oldUser) throws Exception {
LOGGER.info("{} reload {}", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),key);
ListenableFutureTask<User> listenableFutureTask = ListenableFutureTask.create(() -> userDao.get(key));
CompletableFuture.runAsync(listenableFutureTask);
return listenableFutureTask;
}
});

@SneakyThrows
@Override
public User getUser(String id){
// 緩存不存在或返回為null會拋出異常
try {
return cache.getUnchecked(id);
} catch (Exception e) {
return null;
}
}

@Override
public User saveOrUpdateUser(User user){
cache.invalidate(user.getId());
return userDao.saveOrUpdate(user);
}

@Override
public void removeUser(String id){
cache.invalidate(id);
userDao.remove(id);
}

總結:第一種寫法更像是前面說到的Map,在對數據進行CRUD操作時,需要用戶手動對緩存進行同步的更新或刪除操作,所以叫ManualCache(手動),當然Guava Cache對Map的加強依然有效,比如過期清除,緩存容量限制。第二種方式寫法差不多,主要是引入了CacheLoader接口,在讀數據時緩存數據不存在時,通過CacheLoader的load方法先寫緩存后返回數據。

注意

  • expireAfterWrite、refreshAfterWrite的區別。

在refreshAfterWrite導致緩存失效時,并不會因為更新緩存而阻塞緩存數據的返回,只不過是返回老的數據。

  • 不能緩存null

有時候為了將值為null的數據統一緩存,這樣就不會因為沒有緩存數據而訪問數據庫造成壓力。

  • 讀寫時才進行刪除

Guava Cache的緩存數據刪除是在更新或寫入時才會觸發,沒有單獨的調度服務完成這一工作。

  • 本地緩存

類似的本地緩存還有,有興趣的可以自己嘗試,其實實現思想應該也差不多。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-08-29 08:28:17

2023-09-11 07:46:03

Cache2k緩存

2024-01-04 08:33:11

異步JDK數據結構

2023-02-15 14:02:52

HutoolMapProxy工具包

2022-08-05 12:05:07

JavaGuava集合

2023-08-02 09:28:28

計算機性能CPU

2023-09-07 14:04:58

計算機CPU內存

2025-05-30 07:10:19

2025-10-29 01:22:00

2023-07-19 12:24:48

C++constexpr?語句

2017-10-12 12:24:50

java

2012-06-25 17:21:15

天天記事

2011-11-14 09:17:14

Linux運維ClusterShel

2013-07-22 14:15:17

iOS開發ASIHTTPRequ

2025-05-16 08:53:06

2021-03-04 07:24:24

JavaSemaphore高并發

2021-03-18 00:14:29

JavaCyclicBarri高并發

2021-03-11 00:05:55

Java高并發編程

2021-08-30 10:19:05

PyFlink 開發環境Zeppelin No

2021-12-09 06:59:24

FlinkSQL 開發
點贊
收藏

51CTO技術棧公眾號

在线播放亚洲激情| 欧美日韩国产精品一区| 国产综合香蕉五月婷在线| 在线观看天堂av| 成人在线啊v| 一区二区三区欧美亚洲| 精品高清视频| 最近中文字幕在线视频| 在线观看国产精品入口| 亚洲国产精品免费| av视屏在线播放| av片在线观看永久免费| 福利一区福利二区| 日本一本a高清免费不卡| av片在线免费看| 亚洲性视频在线| 色呦呦网站一区| dy888午夜| 台湾av在线二三区观看| 久久超碰97人人做人人爱| 久久久久一本一区二区青青蜜月| 国产激情在线免费观看| 高清一区二区三区av| 欧美日韩国产精品一区二区三区四区 | 成人av毛片在线观看| 91九色在线播放| 国产精品理论片| 国产综合 伊人色| 一区二区三区免费在线| 国产农村妇女毛片精品久久莱园子 | 久久动漫网址| 欧美日韩一区中文字幕| 久在线观看视频| 伊人在我在线看导航| 久久精子c满五个校花| 2014亚洲精品| 亚洲天堂视频在线| 免费视频一区| 国内成人精品视频| 免费三级在线观看| 日韩国产专区| 国产一区二区久久精品| xxxx黄色片| 99香蕉久久| 日韩一卡二卡三卡国产欧美| 在线黄色免费看| 成人av色网站| 色婷婷国产精品久久包臀| 国产精品免费看久久久无码| 免费观看成人高潮| 国产精品网站在线观看| 欧洲高清一区二区| 深夜福利视频在线免费观看| 成人做爰69片免费看网站| 91免费高清视频| 91精品在线视频观看| 石原莉奈在线亚洲二区| 国内伊人久久久久久网站视频 | 欧美特级特黄aaaaaa在线看| 久久99精品久久久久久久久久久久 | 影音先锋久久资源网| 欧美成人免费在线观看| 国产suv精品一区二区68| 人人狠狠综合久久亚洲婷| 国产亚洲精品久久久优势| 亚洲天堂网一区二区| 四虎5151久久欧美毛片| 日韩精品免费在线观看| 欧美bbbbb性bbbbb视频| 天堂一区二区三区四区| 精品爽片免费看久久| 熟女俱乐部一区二区视频在线| 美女毛片一区二区三区四区| 亚洲视频综合网| 国产三级黄色片| 欧美好骚综合网| 日韩一区视频在线| 91高清免费观看| 黄页网站一区| 欧美孕妇与黑人孕交| 波多野结衣视频免费观看| 日本不卡免费在线视频| 成人精品一区二区三区| 亚洲AV无码成人片在线观看| 懂色av一区二区三区免费观看| 国产精品加勒比| 天天影院图片亚洲| 久久精品视频网| 伊人久久大香线蕉av一区| av网站免费在线观看| 亚洲国产日韩在线一区模特 | 国产精品一区亚洲| 国产精品福利久久久| 91丨porny丨在线中文| 国产成人精品免费一区二区| 久中文字幕一区| av在线女优影院| 亚洲精品国产第一综合99久久 | www.91在线| 亚洲天堂av一区| 欧洲精品在线播放| 成人看片网页| 欧美哺乳videos| 国精品无码人妻一区二区三区| 色乱码一区二区三区网站| 欧美第一淫aaasss性| 少妇高潮av久久久久久| 极品少妇一区二区三区精品视频 | 99精品免费观看| 99免费精品在线| 一级做a爰片久久| www欧美xxxx| 欧美亚一区二区| 日本天堂在线播放| 久久性感美女视频| 欧美亚洲国产日韩2020| 国产女人爽到高潮a毛片| 久久奇米777| 国产91在线亚洲| 日韩中文在线播放| 亚洲第一中文字幕| 极品魔鬼身材女神啪啪精品| 久久夜色精品| 国产亚洲欧美一区二区 | 1313精品午夜理伦电影| 中文字幕亚洲综合久久筱田步美| 精品少妇theporn| 蜜桃久久久久久久| 久久天堂国产精品| 欧美日韩经典丝袜| 91.麻豆视频| 一级黄色毛毛片| 在线亚洲免费| 成人免费在线一区二区三区| 亚洲乱亚洲乱妇| 欧亚洲嫩模精品一区三区| 成人免费看片载| 国产精品不卡| 国产精品久久久久久av福利软件| 污视频在线免费| 亚洲综合区在线| 亚洲精品国产久| 久久一区二区三区喷水| 国产精品99一区| 免费一级在线观看| 欧美午夜激情小视频| 高清中文字幕mv的电影| 国自产拍偷拍福利精品免费一 | 亚洲乱码一区二区三区| 美女100%一区| 精品中文字幕久久久久久| 日干夜干天天干| 国产成人亚洲综合a∨婷婷| 三年中国中文在线观看免费播放| 久久久精品一区二区毛片免费看| 亚洲视频视频在线| 中文字幕黄色片| 久久久午夜精品理论片中文字幕| 国产一区二区网| 北条麻妃一区二区三区在线观看| 久操成人在线视频| 性欧美8khd高清极品| 亚洲狠狠爱一区二区三区| 美女流白浆视频| 亚洲一级黄色| 久久99影院| 日韩伦理在线| 亚洲欧美日韩另类| 免费看av在线| 一区二区中文字幕在线| 中文字幕第66页| 午夜天堂精品久久久久| 国产99午夜精品一区二区三区 | 亚洲日本欧美天堂| 深夜福利网站在线观看| 欧美日韩国产成人精品| 国产精品一区二区不卡视频| 国产777精品精品热热热一区二区| 亚洲精品国产品国语在线| 亚洲 欧美 成人| 国产精品丝袜一区| 9191在线视频| 国产午夜久久| 午夜一区二区三区| 欧洲大片精品免费永久看nba| 欧美激情一区二区三区成人| 欧美午夜黄色| 91.com视频| 日韩欧美大片在线观看| 国产欧美日韩一区二区三区在线观看 | 超碰在线免费播放| 亚洲精品国产精品国自产在线| 四虎成人在线观看| 亚洲欧美在线视频| 亚洲成人av免费在线观看| 喷水一区二区三区| 国产免费内射又粗又爽密桃视频| 天堂99x99es久久精品免费| 国产中文日韩欧美| 女人让男人操自己视频在线观看| 在线视频亚洲欧美| 国产综合无码一区二区色蜜蜜| 欧美午夜精品在线| 黑鬼狂亚洲人videos| 91麻豆精品在线观看| 污污的视频免费观看| 99精品热6080yy久久| 亚洲啪啪av| 嫩草国产精品入口| 成人免费视频网址| 伊人久久高清| 欧美极品xxxx| 五月天婷婷在线视频| 日韩精品在线观| 国产喷水吹潮视频www| 色综合久久88色综合天天免费| 国产午夜精品理论片| 91免费版在线看| av在线免费观看不卡| 日韩国产高清影视| 国产极品尤物在线| 欧美福利影院| 一本色道婷婷久久欧美| 五月天亚洲色图| 成人黄色在线免费观看| 日本一区二区中文字幕| 热久久免费视频精品| 精精国产xxxx视频在线中文版| 中文字幕日韩在线视频| 欧美偷拍视频| 亚洲国产精久久久久久久| 国产精品日韩无码| 欧美吻胸吃奶大尺度电影| 国产a∨精品一区二区三区仙踪林| 伊人性伊人情综合网| 网站永久看片免费| 国产欧美精品一区二区三区四区| www.自拍偷拍| 99久久综合99久久综合网站| 久久av一区二区三| 国产美女在线精品| 激情五月婷婷基地| 青草av.久久免费一区| 久久国产色av免费观看| 亚洲第一黄网| 成年人看的毛片| 欧美天堂亚洲电影院在线观看| 99re8这里只有精品| 91久久国产| 国产麻豆电影在线观看| 天天做天天爱天天爽综合网| 亚洲春色在线视频| 欧美中文一区二区| 一本一本久久a久久精品综合妖精| 精品视频亚洲| 日韩精品福利视频| 精品国产乱码久久久| 色吧亚洲视频| 日韩av在线播放网址| 亚洲欧洲精品一区二区三区波多野1战4| 精品久久久久中文字幕小说| 日韩一区二区三区资源| 成人激情免费视频| 亚洲精品国产精品国自产| 色天天久久综合婷婷女18| 一区二区不卡在线观看| 97视频精品| 福利网在线观看| 午夜精品剧场| 搞av.com| 免播放器亚洲| 性chinese极品按摩| 狠狠色丁香九九婷婷综合五月| www.51色.com| 不卡视频在线观看| 蜜桃av免费看| 中文字幕在线一区二区三区| 国产精品久久久免费看| 一区二区三区中文字幕在线观看| 精品无码人妻一区二区三区品 | 国产成人无码一区二区在线播放| 日本道色综合久久| 国产精品嫩草影院精东| 精品国产污网站| 欧美孕妇孕交xxⅹ孕妇交| 中国china体内裑精亚洲片| 中文字幕在线观看网站| 97av视频在线| 久久69成人| 国产高清一区二区三区| 欧美日韩播放| 麻豆视频传媒入口| 国产精品一级| 午夜激情视频网| 99国产麻豆精品| 四虎影视1304t| 亚洲伊人伊色伊影伊综合网 | 欧美巨大另类极品videosbest| 99久久精品国产成人一区二区 | 国产成人av| 2021狠狠干| 美女精品在线观看| 久久久久久久久久久久久久久国产| 99视频精品全部免费在线| 亚洲一二三四视频| 亚洲国产裸拍裸体视频在线观看乱了| 精品久久久久久久久久久久久久久久久久| 欧美一卡二卡在线观看| 欧美精品少妇| 久国内精品在线| 久久人体av| 久久久久成人精品免费播放动漫| 欧美高清视频在线观看mv| 亚洲中文字幕无码中文字| 国产乱码精品一区二区三区忘忧草| 亚洲av无码一区二区二三区| 亚洲激情图片一区| 国产精品传媒在线观看| 亚洲黄页网在线观看| v天堂福利视频在线观看| 国产精品九九久久久久久久| 成功精品影院| 国产高清精品软男同| 日韩精品一二三| 国产肉体xxxx裸体784大胆| 亚洲免费资源在线播放| 精品乱码一区内射人妻无码| 亚洲精品乱码久久久久久金桔影视| 超碰在线免费公开| 成人激情视频网| 国产亚洲第一伦理第一区| 国产淫片免费看| av一本久道久久综合久久鬼色| 在线看的片片片免费| 欧美午夜片在线观看| 免费理论片在线观看播放老| 午夜精品久久17c| 日韩一二三区| 免费的一级黄色片| 国产一区二区三区高清播放| 国产不卡在线观看视频| 在线视频一区二区免费| 日本一级在线观看| 91国内精品久久| 国产精品对白久久久久粗| 日韩 欧美 视频| 国产成人免费高清| 久草网在线观看| 欧美不卡一区二区三区| 污视频免费在线观看| 亚洲最大av网| 中文字幕av亚洲精品一部二部| 婷婷激情小说网| 亚洲精品美国一| 亚洲第九十九页| 欧美激情网站在线观看| 亚洲伊人影院| 欧美高清中文字幕| 成人午夜av影视| 国产午夜在线播放| 日韩精品免费在线观看| 黑人巨大精品欧美一区二区桃花岛| 久久精品五月婷婷| 日韩主播视频在线| 日韩福利在线视频| 欧美日韩激情在线| 神马午夜伦理不卡| 国产伦精品一区二区三区免费视频 | 中文字幕在线观看网站| 成人免费视频视频在| 99热精品在线| 蜜桃久久精品成人无码av| 欧美日韩三级在线| 国产日产一区二区| 国产99午夜精品一区二区三区| 国产欧美精品| 亚洲黄色小说视频| 777久久久精品| missav|免费高清av在线看| 精品网站在线看| 日韩精品亚洲一区| 国产精品国产精品88| 亚洲精美色品网站| 日本成人片在线| 中文字幕第50页| av电影天堂一区二区在线| 久久久精品毛片| 久久国产精品久久久久| 免费观看成人www动漫视频| 亚洲精品高清无码视频| 亚洲欧美电影一区二区| 无码精品黑人一区二区三区| 国产精品va在线播放我和闺蜜| 久久精品久久久| 黄色免费视频网站| 欧美视频在线一区| 97人澡人人添人人爽欧美| 午夜午夜精品一区二区三区文| 成人性视频免费网站| 伊人久久成人网|