国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Guava Cache 異步刷新技巧,你值得擁有!

開發 前端
Guava Cache 的數據結構跟 JDK1.7 的 ConcurrentHashMap 類似,提供了基于時間、容量、引用三種回收策略,以及自動加載、訪問統計等功能。 圖片

Guava Cache是一款非常優秀的本地緩存框架。

這篇文章,我們聊聊如何使用 Guava Cache 異步刷新技巧帶飛系統性能 。

圖片圖片

1 經典配置

Guava Cache 的數據結構跟 JDK1.7 的 ConcurrentHashMap 類似,提供了基于時間、容量、引用三種回收策略,以及自動加載、訪問統計等功能。

圖片圖片

首先,我們溫習下 Gauva Cache 的經典配置 。

圖片圖片

例子中,緩存最大容量設置為 100 (基于容量進行回收),配置了失效策略和刷新策略。

  • 失效策略

配置 expireAfterWrite 后,緩存項在被創建或最后一次更新后的指定時間內會過期。

  • 刷新策略

配置 refreshAfterWrite 設置刷新時間,當緩存項過期的同時可以重新加載新值 。

這個例子里,有的同學可能會有疑問:為什么需要配置刷新策略,只配置失效策略不就可以嗎?

當然是可以的,但在高并發場景下,配置刷新策略會有奇效,接下來,我們會寫一個測試用例,方便大家理解 Gauva Cache 的線程模型。

2  理解線程模型

我們模擬在多線程場景下,「緩存過期執行 load 方法」和「刷新執行 reload 方法」兩者的運行情況。

圖片圖片

執行結果見下圖:

圖片圖片

執行結果表明:Guava Cache 并沒有后臺任務線程異步的執行 load 或者 reload 方法。

失效策略:expireAfterWrite 允許一個線程執行 load 方法,其他線程阻塞等待 。當大量線程用相同的 key 獲取緩存值時,只會有一個線程進入 load 方法,而其他線程則等待,直到緩存值被生成。這樣也就避免了緩存擊穿的危險。高并發場景下 ,這樣還是會阻塞大量線程。

刷新策略:refreshAfterWrite 允許一個線程執行 load 方法,其他線程返回舊的值。單個 key 并發下,使用 refreshAfterWrite ,雖然不會阻塞了,但是如果恰巧同時多個 key 同時過期,還是會給數據庫造成壓力。

為了提升系統性能,我們可以從如下兩個方面來優化 :

  1. 配置  refresh < expire ,減少大量線程阻塞的概率;
  2. 采用異步刷新的策略,也就是線程異步加載數據,期間所有請求返回舊的緩存值,防止緩存雪崩。

下圖展示優化方案的時間軸 :

圖片圖片

3 兩種方式實現異步刷新

3.1 重寫 reload 方法

圖片圖片

3.2 實現 asyncReloading 方法

圖片圖片

不管使用哪種方案, 都需要定義單獨的線程池來執行刷新任務 。

4 異步刷新 + 多級緩存

2018 年,筆者服務的一家電商公司需要進行 app 首頁接口的性能優化。筆者花了大概兩天的時間完成了整個方案,采取的是兩級緩存模式,同時采用了 Guava 的異步刷新機制。

整體架構如下圖所示:

圖片圖片

緩存讀取流程如下 :

  • 業務網關剛啟動時,本地緩存沒有數據,讀取 Redis 緩存,如果 Redis 緩存也沒數據,則通過 RPC 調用導購服務讀取數據,然后再將數據寫入本地緩存和 Redis 中;若 Redis 緩存不為空,則將緩存數據寫入本地緩存中。
  • 由于步驟1已經對本地緩存預熱,后續請求直接讀取本地緩存,返回給用戶端。
  • Guava 配置了 refresh 機制,每隔一段時間會調用自定義 LoadingCache 線程池(5個最大線程,5個核心線程)去導購服務同步數據到本地緩存和 Redis 中。

優化后,性能表現很好,平均耗時在 5ms 左右,同時大幅度的減少應用 GC 的頻率。

該方案依然有瑕疵,一天晚上我們發現 app 端首頁顯示的數據時而相同,時而不同。

也就是說:雖然 LoadingCache 線程一直在調用接口更新緩存信息,但是各個服務器本地緩存中的數據并非完成一致。

這說明了兩個很重要的點:

  • 惰性加載仍然可能造成多臺機器的數據不一致;
  • LoadingCache 線程池數量配置的不太合理,  導致了任務堆積。

最終,我們的解決方案是:

  • 異步刷新結合消息機制來更新緩存數據,也就是:當導購服務的配置發生變化時,通知業務網關重新拉取數據,更新緩存。
  • 適當調大 LoadingCache 的線程池參數,并在線程池埋點,監控線程池的使用情況,當線程繁忙時能發出告警,然后動態修改線程池參數。

5 總結

Guava Cache 非常強大,它并沒有后臺任務線程異步的執行 load 或者 reload 方法,而是通過請求線程來執行相關操作。

為了提升系統性能,我們可以從如下兩個方面來處理 :

  • 配置 refresh < expire,減少大量線程阻塞的概率。
  • 采用異步刷新的策略,也就是線程異步加載數據,期間所有請求返回舊的緩存值。

筆者曾經優化過某電商網站的首頁接口,使用的方案是:Guava 的異步刷新機制 + 多級緩存 ,取得了非常好的優化效果。

盡管如此,我們在使用這種方式時,依然需要考慮的緩存和數據庫一致性問題。

參考資料:

https://albenw.github.io/posts/df42dc84/


責任編輯:武曉燕 來源: 勇哥Java實戰
相關推薦

2021-01-21 09:45:16

Python字符串代碼

2021-03-18 07:52:42

代碼性能技巧開發

2021-09-06 10:22:47

匿名對象編程

2020-02-03 12:25:35

Python工具服務器

2023-12-29 08:17:26

Python代碼分析Profile

2024-08-29 08:28:17

2021-07-05 09:40:57

工具Node開源

2020-12-14 13:32:40

Python進度條參數

2020-10-09 11:54:33

Vue用戶的React

2014-12-19 10:55:17

Linux性能監控

2020-09-01 07:41:56

macOS工具

2024-12-18 16:53:13

ncduLinux磁盤分析

2022-09-21 08:16:18

緩存框架

2020-03-08 13:24:47

JavaScript開發

2020-06-15 14:43:16

Python開發工具

2022-01-18 16:42:03

區塊鏈加密信息資源

2011-10-08 10:15:29

Web

2016-07-28 09:37:30

開源協作軟件Collabtive

2013-07-05 16:08:40

開發效率

2025-05-16 08:53:06

點贊
收藏

51CTO技術棧公眾號

在线精品国产| 亚洲免费大片在线观看| 中文字幕av久久| 成人精品电影在线观看| 五月婷婷激情久久| 91成人免费网站| 亚洲人体视频| 亚洲黄色片网站| 日韩精品一区二区三区四区视频| 超碰在线播放91| 亚洲一区二区免费视频| 蜜桃视频在线观看免费视频网站www| 日韩国产激情在线| 国产厕拍一区| 欧美日韩精品免费看| 亚洲色欲色欲www在线观看| 国产系列在线观看| 隔壁老王国产在线精品| 先锋a资源在线看亚洲| 99视频入口| 国产亚洲人成a一在线v站| 国产精品久久久久毛片大屁完整版 | xxav国产精品美女主播| 国产一区日韩一区| 成年人网站国产| 欧美午夜视频在线观看| 欧美高清一级片| 自拍亚洲欧美老师丝袜| 欧美性色xo影院| 秋霞影院一区二区三区| av高清在线免费观看| 欧美一级夜夜爽| 欧美日韩调教| 四虎精品在永久在线观看| 久久精品电影一区二区| 亚洲国产精品91| 免费一区二区三区在线观看| 国产亚洲一级高清| 岛国av在线一区| 五月天婷婷在线视频| 成人激情视频免费在线| 国产欧美日韩卡一| 成人在线视频www| 中文字幕日韩一区二区三区| 欧美日韩一卡二卡三卡| 成人同人动漫免费观看| 色视频免费在线观看| 成人免费网站在线观看| 亚洲精品免费视频| 四虎成人精品一区二区免费网站| 国产性生活免费视频| 日韩在线观看免费网站| 国产69精品一区二区亚洲孕妇| ****av在线网毛片| 日韩av大全| 色yeye香蕉凹凸一区二区av| 不卡的看片网站| 国产精品日本一区二区三区在线| 性一交一乱一伧国产女士spa| 影音先锋日韩有码| 国产激情一区二区三区四区 | 亚洲国产日韩综合久久精品| 亚洲破处大片| 91高清视频在线观看| 欧美黄色免费网址| 91av在线看| 欧美一区二区视频网站| 久久中文在线| 91在线一区| 老司机在线永久免费观看| 日本一区二区不卡高清更新| 久久久精品美女| 一区二区三区在线视频免费观看| 樱桃成人精品视频在线播放| 日本在线视频一区二区| 成人黄色免费| 精品视频免费观看| 欧美黄色三级网站| 婷婷丁香久久五月婷婷| hitomi一区二区三区精品| 思热99re视热频这里只精品| 成人在线视频亚洲| 免费看av大片| 久久久久久一区| 欧美激情精品久久久久久黑人 | 国产精品丝袜高跟| 欧美一区二区日韩| 一区二区中文字幕在线| 欧美三级乱码| 精品综合久久88少妇激情| 在线视频资源站| 国产91在线免费| 麻豆成人小视频| 播播国产欧美激情| 欧美丰满少妇xxxxx高潮对白| 精品在线亚洲视频| 国产精品av一区二区| 亚洲精品无播放器在线播放| 哥也色在线视频| 日本中文字幕在线看| 免费av网页| 日韩和欧美的一区二区| 国产一区二区三区在线观看网站| 99久久精品情趣| 波多野结衣一区二区三区| 模特精品在线| 日韩欧美在线精品| 欧美黑人巨大精品一区二区| 国内精品久久久久影院一蜜桃| 亚洲91精品| 亚洲日本黄色| 视频一区在线视频| 欧美激情另类| 综合在线一区| 国产一区二区三区四区三区四| 日韩精品第二页| 每日更新在线观看av| 日韩a级作爱片一二三区免费观看| 少妇人妻大乳在线视频| 亚洲午夜精品一区二区| 一区二区日本| 成人一区二区在线| 99视频在线免费观看| 热门国产精品亚洲第一区在线| 欧美刺激午夜性久久久久久久| 亚洲一区二区三区成人| 日本香蕉视频在线观看| 国内少妇毛片视频| 色乱码一区二区三区在线| mm131亚洲精品| 91在线观看入口| 涩爱av在线播放一区二区| 国产一级片在线| 日韩免费小视频| 高潮久久久久久久久久久久久久| 欧美一区二区三区高清视频| 日韩欧美在线精品| 91精品啪在线观看国产81旧版| 青青草国产精品97视觉盛宴| 久久噜噜亚洲综合| 成人午夜电影小说| 日韩欧美大尺度| 欧美不卡一区二区三区四区| 欧美二区在线播放| 91tv亚洲精品香蕉国产一区7ujn| 国产精品专区h在线观看| 欧美日韩另类综合| 久草福利资源在线视频| 欧美电影免费观看高清完整| 青青草成人影院| www.欧美日韩国产在线| 在线观看不卡一区| 日韩视频国产视频| 国产精品久久久久久久美男| 免费看黄在线看| 一区二区三区伦理| 亚州国产精品| av不卡免费电影| 欧美一区二区精美| 日韩美女在线播放| 蜜桃视频成人| 日本1区2区3区中文字幕| 成人国产精选| 国产精品自在在线| 日韩欧美亚洲国产精品字幕久久久| 亚洲午夜未删减在线观看| 国产精品免费观看高清| 亚洲图片123| 日韩欧美激情| 国产成人免费视| 欧美日韩一区不卡| 国产一区二区三区高清| 美女被人操视频在线观看| 成人久久网站| 日本人妖一区二区| 精品国产亚洲在线| 成人h猎奇视频网站| 成人免费观看视频在线观看| a级在线观看| 日本女优在线视频一区二区| 亚洲免费观看高清| 久久久久久久久久久亚洲| 狠狠热免费视频| 天美av一区二区三区久久| 91网站在线播放| 日韩精品中文字幕在线播放| 96久久精品| 亚洲女优视频| 经典一区二区| 国产亚洲精品免费| 奇米4444一区二区三区 | 亚洲三级小视频| 国产精品视频免费一区| 在线观看国产麻豆| 在线精品一区| 欧美性猛交xxxx乱大交极品| 国产成人在线视频| av网站在线看| 日韩国产欧美在线播放| 欧美女孩性生活视频|