<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      Redis + Caffeine 太強了!

      0
      分享至

      Java精選面試題(微信小程序):5000+道面試題和選擇題,真實面經(jīng)簡歷模版,包含Java基礎、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設計、大廠真題等,在線隨時刷題!

      背景

      在高性能的服務架構(gòu)設計中,緩存是一個不可或缺的環(huán)節(jié)。在實際的項目中,我們通常會將一些熱點數(shù)據(jù)存儲到Redis或Memcached 這類緩存中間件中,只有當緩存的訪問沒有命中時再查詢數(shù)據(jù)庫。在提升訪問速度的同時,也能降低數(shù)據(jù)庫的壓力。

      隨著不斷的發(fā)展,這一架構(gòu)也產(chǎn)生了改進,在一些場景下可能單純使用Redis類的遠程緩存已經(jīng)不夠了,還需要進一步配合本地緩存使用,例如Guava cache或Caffeine,從而再次提升程序的響應速度與服務性能。于是,就產(chǎn)生了使用本地緩存作為一級緩存,再加上遠程緩存作為二級緩存的兩級緩存架構(gòu)。

      在先不考慮并發(fā)等復雜問題的情況下,兩級緩存的訪問流程可以用下面這張圖來表示:


      為什么要使用本地緩存

      本地緩存基于本地環(huán)境的內(nèi)存,訪問速度非常快,對于一些變更頻率低、實時性要求低的數(shù)據(jù),可以放在本地緩存中,提升訪問速度。

      使用本地緩存能夠減少和Redis類的遠程緩存間的數(shù)據(jù)交互,減少網(wǎng)絡I/O開銷,降低這一過程中在網(wǎng)絡通信上的耗時。

      設計一個本地內(nèi)存需要有什么功能

      1. 存儲,并可以讀、寫;

      2. 原子操作(線程安全),如ConcurrentHashMap;

      3. 可以設置緩存的最大限制;

      4. 超過最大限制有對應淘汰策略,如LRU、LFU;

      5. 過期時間淘汰,如定時、懶式、定期;

      6. 持久化;

      7. 統(tǒng)計監(jiān)控。

      本地緩存方案選型

      1. 使用ConcurrentHashMap實現(xiàn)本地緩存

      緩存的本質(zhì)就是存儲在內(nèi)存中的KV數(shù)據(jù)結(jié)構(gòu),對應的就是jdk中線程安全的ConcurrentHashMap,但是要實現(xiàn)緩存,還需要考慮淘汰、最大限制、緩存過期時間淘汰等等功能;

      優(yōu)點是實現(xiàn)簡單,不需要引入第三方包,比較適合一些簡單的業(yè)務場景。缺點是如果需要更多的特性,需要定制化開發(fā),成本會比較高,并且穩(wěn)定性和可靠性也難以保障。對于比較復雜的場景,建議使用比較穩(wěn)定的開源工具。

      2. 基于Guava Cache實現(xiàn)本地緩存

      Guava是Google團隊開源的一款 Java 核心增強庫,包含集合、并發(fā)原語、緩存、IO、反射等工具箱,性能和穩(wěn)定性上都有保障,應用十分廣泛。Guava Cache支持很多特性:

      • 支持最大容量限制

      • 支持兩種過期刪除策略(插入時間和訪問時間)

      • 支持簡單的統(tǒng)計功能

      • 基于LRU算法實現(xiàn)

      使用代碼如下:

          com.google.guava     guava     31.1-jre @Slf4j public class GuavaCacheTest {     public static void main(String[] args) throws ExecutionException {         Cache cache = CacheBuilder.newBuilder()                 .initialCapacity(5)  // 初始容量                 .maximumSize(10)     // 最大緩存數(shù),超出淘汰                 .expireAfterWrite(60, TimeUnit.SECONDS) // 過期時間                 .build();         String orderId = String.valueOf(123456789);         // 獲取orderInfo,如果key不存在,callable中調(diào)用getInfo方法返回數(shù)據(jù)         String orderInfo = cache.get(orderId, () -> getInfo(orderId));         log.info("orderInfo = {}", orderInfo);     }     private static String getInfo(String orderId) {         String info = "";         // 先查詢redis緩存         log.info("get data from redis");         // 當redis緩存不存在查db         log.info("get data from mysql");         info = String.format("{orderId=%s}", orderId);         return info;     } }

      3. Caffeine

      Caffeine是基于java8實現(xiàn)的新一代緩存工具,緩存性能接近理論最優(yōu)。可以看作是Guava Cache的增強版,功能上兩者類似,不同的是Caffeine采用了一種結(jié)合LRU、LFU優(yōu)點的算法:W-TinyLFU,在性能上有明顯的優(yōu)越性

      使用代碼如下:

          com.github.ben-manes.caffeine     caffeine     2.9.3 @Slf4j public class CaffeineTest {     public static void main(String[] args) {         Cache cache = Caffeine.newBuilder()                 .initialCapacity(5)                 // 超出時淘汰                 .maximumSize(10)                 //設置寫緩存后n秒鐘過期                 .expireAfterWrite(60, TimeUnit.SECONDS)                 //設置讀寫緩存后n秒鐘過期,實際很少用到,類似于expireAfterWrite                 //.expireAfterAccess(17, TimeUnit.SECONDS)                 .build();         String orderId = String.valueOf(123456789);         String orderInfo = cache.get(orderId, key -> getInfo(key));         System.out.println(orderInfo);     }     private static String getInfo(String orderId) {         String info = "";         // 先查詢redis緩存         log.info("get data from redis");         // 當redis緩存不存在查db         log.info("get data from mysql");         info = String.format("{orderId=%s}", orderId);         return info;     } }

      4. Encache

      Encache是一個純Java的進程內(nèi)緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。同Caffeine和Guava Cache相比,Encache的功能更加豐富,擴展性更強:

      • 支持多種緩存淘汰算法,包括LRU、LFU和FIFO

      • 緩存支持堆內(nèi)存儲、堆外存儲、磁盤存儲(支持持久化)三種

      • 支持多種集群方案,解決數(shù)據(jù)共享問題

      使用代碼如下:

          org.ehcache     ehcache     3.9.7 @Slf4j public class EhcacheTest {     private static final String ORDER_CACHE = "orderCache";     public static void main(String[] args) {         CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()                 // 創(chuàng)建cache實例                 .withCache(ORDER_CACHE, CacheConfigurationBuilder                         // 聲明一個容量為20的堆內(nèi)緩存                         .newCacheConfigurationBuilder(String.class, String.class, ResourcePoolsBuilder.heap(20)))                 .build(true);         // 獲取cache實例         Cache cache = cacheManager.getCache(ORDER_CACHE, String.class, String.class);         String orderId = String.valueOf(123456789);         String orderInfo = cache.get(orderId);         if (StrUtil.isBlank(orderInfo)) {             orderInfo = getInfo(orderId);             cache.put(orderId, orderInfo);         }         log.info("orderInfo = {}", orderInfo);     }     private static String getInfo(String orderId) {         String info = "";         // 先查詢redis緩存         log.info("get data from redis");         // 當redis緩存不存在查db         log.info("get data from mysql");         info = String.format("{orderId=%s}", orderId);         return info;     } }
      本地緩存問題及解決

      1. 緩存一致性

      兩級緩存與數(shù)據(jù)庫的數(shù)據(jù)要保持一致,一旦數(shù)據(jù)發(fā)生了修改,在修改數(shù)據(jù)庫的同時,本地緩存、遠程緩存應該同步更新。

      解決方案1: MQ

      一般現(xiàn)在部署都是集群部署,有多個不同節(jié)點的本地緩存; 可以使用MQ的廣播模式,當數(shù)據(jù)修改時向MQ發(fā)送消息,節(jié)點監(jiān)聽并消費消息,刪除本地緩存,達到最終一致性;


      解決方案2:Canal + MQ

      如果你不想在你的業(yè)務代碼發(fā)送MQ消息,還可以適用近幾年比較流行的方法:訂閱數(shù)據(jù)庫變更日志,再操作緩存。Canal 訂閱Mysql的 Binlog日志,當發(fā)生變化時向MQ發(fā)送消息,進而也實現(xiàn)數(shù)據(jù)一致性。


      2. 如何提高本地緩存命中率

      參考:如何提高緩存命中率

      3. 本地內(nèi)存的技術選型問題

      • 從易用性角度,Guava Cache、Caffeine和Encache都有十分成熟的接入方案,使用簡單。

      • 從功能性角度,Guava Cache和Caffeine功能類似,都是只支持堆內(nèi)緩存,Encache相比功能更為豐富

      • 從性能上進行比較,Caffeine最優(yōu)、GuavaCache次之,Encache最差(下圖是三者的性能對比結(jié)果)


      對于本地緩存的方案中,我比較推薦Caffeine,性能上遙遙領先。

      雖然Encache功能更為豐富,甚至提供了持久化和集群的功能,但是這些功能完全可以依靠其他方式實現(xiàn)。真實的業(yè)務工程中,建議使用Caffeine作為本地緩存,另外使用redis或者memcache作為分布式緩存,構(gòu)造多級緩存體系,保證性能和可靠性。

      來源:https://blog.csdn.net/One_hundred_nice/article/details/123950638

      公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡,系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!

      文章有幫助的話,點在看,轉(zhuǎn)發(fā)吧!

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開口就討“廢料”

      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開口就討“廢料”

      百態(tài)人間
      2025-12-19 16:48:22
      華子轟26+12仍無緣今日最佳!對不起,你碰到不講理的文班亞馬了

      華子轟26+12仍無緣今日最佳!對不起,你碰到不講理的文班亞馬了

      世界體育圈
      2025-12-20 13:38:48
      “成都27歲女子家門口被殺案”宣判,法院認為被告人行為不構(gòu)成自首

      “成都27歲女子家門口被殺案”宣判,法院認為被告人行為不構(gòu)成自首

      澎湃新聞
      2025-12-20 15:06:27
      “英國關之琳”閃婚大25歲白頭大叔,全網(wǎng)崩潰:垃圾堆里找男人?

      “英國關之琳”閃婚大25歲白頭大叔,全網(wǎng)崩潰:垃圾堆里找男人?

      陳天宇
      2025-12-20 00:04:13
      臺北市長蔣萬安將赴上海,行程曝光

      臺北市長蔣萬安將赴上海,行程曝光

      第一財經(jīng)資訊
      2025-12-19 21:59:17
      小米17 Ultra代號夜神 盧偉冰:絕對是最強Ultra

      小米17 Ultra代號夜神 盧偉冰:絕對是最強Ultra

      快科技
      2025-12-20 22:58:07
      楊晨成國安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關鍵優(yōu)勢

      楊晨成國安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關鍵優(yōu)勢

      光輝與陰暗
      2025-12-20 23:57:45
      碾壓,曼城英超對陣西漢姆聯(lián)已連續(xù)20場不敗+7連勝

      碾壓,曼城英超對陣西漢姆聯(lián)已連續(xù)20場不敗+7連勝

      懂球帝
      2025-12-21 01:17:58
      邢自強:如果房地產(chǎn)不實現(xiàn)止跌回穩(wěn),很難打破消費疲軟等問題

      邢自強:如果房地產(chǎn)不實現(xiàn)止跌回穩(wěn),很難打破消費疲軟等問題

      新浪財經(jīng)
      2025-12-18 15:48:03
      陳志的可怕,不在他有多狠,而在于他一路順風順水

      陳志的可怕,不在他有多狠,而在于他一路順風順水

      熱點菌本君
      2025-11-10 15:45:57
      2025國劇最高分!《反人類暴行》豆瓣開分8.5

      2025國劇最高分!《反人類暴行》豆瓣開分8.5

      新京報
      2025-12-19 17:46:22
      驚心動魄!60歲老人因意外“頭頸分離”直送ICU,經(jīng)廣州醫(yī)生搶救獲重生

      驚心動魄!60歲老人因意外“頭頸分離”直送ICU,經(jīng)廣州醫(yī)生搶救獲重生

      極目新聞
      2025-12-20 08:38:15
      網(wǎng)友們終于把蒸汽機發(fā)明這事給理明白了

      網(wǎng)友們終于把蒸汽機發(fā)明這事給理明白了

      清暉有墨
      2025-11-24 14:01:50
      早就想打!日媒首次爆料:中國雙航母出動時日軍戰(zhàn)機已做戰(zhàn)斗準備

      早就想打!日媒首次爆料:中國雙航母出動時日軍戰(zhàn)機已做戰(zhàn)斗準備

      詩意世界
      2025-08-21 13:13:50
      國際足聯(lián)官宣,登貝萊再破天花板,讓梅西和整個體壇都“沉默”了

      國際足聯(lián)官宣,登貝萊再破天花板,讓梅西和整個體壇都“沉默”了

      負面黑洞
      2025-12-20 07:31:41
      摩爾線程發(fā)布新一代GPU架構(gòu)“花港”:能效提升10倍,支持十萬卡以上智算集群

      摩爾線程發(fā)布新一代GPU架構(gòu)“花港”:能效提升10倍,支持十萬卡以上智算集群

      澎湃新聞
      2025-12-20 10:48:26
      俄羅斯沒想到,美國更沒想到,如今的中國石油,成為石油遙遙領先

      俄羅斯沒想到,美國更沒想到,如今的中國石油,成為石油遙遙領先

      生活新鮮市
      2025-12-20 16:24:32
      荷蘭不給晶圓,聞泰有新招

      荷蘭不給晶圓,聞泰有新招

      觀察者網(wǎng)
      2025-12-20 08:36:14
      連場轟20+!中國女籃26歲2米王牌閃耀:升聯(lián)盟第2,宮帥招她嗎?

      連場轟20+!中國女籃26歲2米王牌閃耀:升聯(lián)盟第2,宮帥招她嗎?

      李喜林籃球絕殺
      2025-12-20 16:09:28
      中日交惡,錯在中方?第二個指責我國的出現(xiàn),點名中國用詞激烈

      中日交惡,錯在中方?第二個指責我國的出現(xiàn),點名中國用詞激烈

      肖茲探秘說
      2025-11-25 13:12:05
      2025-12-21 01:51:00
      Java精選
      Java精選
      一場永遠也演不完的戲
      1764文章數(shù) 3859關注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      印度官員:若"臺灣有事" 印度不太可能像西方那樣回應

      頭條要聞

      印度官員:若"臺灣有事" 印度不太可能像西方那樣回應

      體育要聞

      我開了20年大巴,現(xiàn)在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經(jīng)要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進L3量產(chǎn)測試 已完成11萬公里實際道路驗證

      態(tài)度原創(chuàng)

      時尚
      家居
      本地
      數(shù)碼
      公開課

      最顯腿細的騎士靴,誰穿誰是腿精

      家居要聞

      高端私宅 理想隱居圣地

      本地新聞

      云游安徽|訪黃山云海古村,讀一城山水風骨

      數(shù)碼要聞

      50歲了!長虹第一臺彩電入駐中國國家博物館

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 子洲县| 欧美猛少妇色xxxxx| 国产精品无码制服丝袜| 亚洲无码人妻| 欧洲无码av| 久久99精品久久久久子伦| 无码人妻少妇久久中文字幕| 免费观看在线A级毛片| 亚洲一区二区三区播放| 亚洲男人的天堂在线观看| 欧洲成人精品| 大桥未久亚洲无av码在线| 国产永久免费高清在线观看| 加勒比久久AV| 狠狠躁18三区二区一区| 无码人妻精品一区二区三| 日韩无码第2页| 亚洲日韩字幕| 久久99精品国产麻豆婷婷| 亚洲色人| 丰满人妻被黑人猛烈进入| 国产成人AV| 日本不卡视频| 汽车| 真人作爱免费视频| 亚洲 制服 丝袜 无码| 制服丝袜亚洲无码| 18无码粉嫩小泬无套在线观看| 欧美性猛交xxxx免费看| 一本色道久久综合熟妇| 亚洲av无码专区在线亚| 中文字幕精品熟女| 让少妇高潮无乱码高清在线观看| 91狠狠爱| 九九成人免费视频| 强奷乱码中文字幕| jizzjizz日韩| 精品国产乱码久久久久久婷婷| 久久99精品久久久久子伦| 国产精品无码mv在线观看| 中文字幕乱码中文乱码51精品|