Redisson RLocalCachedMap 核心參數詳解

🧑 博主簡介:CSDN博客專家歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編程高并發設計Springboot和微服務,熟悉LinuxESXI虛擬化以及云原生Docker和K8s,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea

在這里插入圖片描述


在這里插入圖片描述

Redisson RLocalCachedMap 核心參數詳解

RLocalCachedMap 簡介

RLocalCachedMap 是 Redisson 框架中的核心分布式數據結構,專為高性能分布式系統設計。它在傳統分布式緩存的基礎上實現了革命性的突破——將 本地內存的速度優勢Redis 分布式存儲的一致性保障 完美融合。

在分布式集群環境中,頻繁訪問 Redis 會導致網絡延遲成為瓶頸。RLocalCachedMap 通過在每個 JVM 實例本地維護熱數據副本,使讀取操作直接命中本地內存(微秒級響應),相比遠程 Redis 訪問(毫秒級)性能提升 1-2 個數量級。同時,它通過智能的 Pub/Sub 同步機制(支持 INVALIDATEUPDATE 策略),確保集群內任一節點修改數據時,所有實例的本地緩存實時失效或更新,從而在接近本地速度的體驗下,提供了強一致性保證。

其核心價值在于解決分布式系統的 "速度與一致性"悖論

  • 對讀密集型場景(如商品詳情、用戶會話):通過本地緩存扛住超高 QPS,降低 Redis 負載
  • 對數據一致性敏感場景(如庫存、配置):通過實時同步避免臟讀
  • 對帶寬敏感場景:支持僅同步哈希值的最小化網絡開銷

RLocalCachedMap 是構建低延遲高吞吐分布式應用的基石技術,適用于電商、金融、實時分析等領域,顯著提升系統擴展性與用戶體驗。

RLocalCachedMap 是 Redisson 提供的一種高性能分布式本地緩存結構,它結合了本地內存緩存的速度優勢和 Redis 分布式存儲的一致性。以下是對其核心配置參數的詳細說明:


1. 緩存生存周期與容量 (Time & Capacity)

  • timeToLive (long, 單位:毫秒)

    • 作用: 定義本地緩存中每個條目(Entry)的最大存活時間。
    • 行為:
      • > 0:條目在本地緩存中存活指定毫秒數后自動過期并被移除。
      • = 0默認值。本地緩存條目永不過期(需依賴其他淘汰機制或顯式刪除)。
    • 注意: 此超時僅作用于本地緩存副本。Redis 主存儲中的數據不受此設置影響(需通過 Redis 自身 TTL 設置)。
  • cacheSize (int)

    • 作用: 設置單個本地緩存實例允許存儲的最大條目數量上限。
    • 行為: 當本地緩存條目數達到此閾值時,將根據 evictionPolicy 策略淘汰條目以騰出空間。
    • 重要性: 防止本地緩存無限增長導致 JVM OOM (OutOfMemoryError)。

2. 淘汰策略 (Eviction Policy)

  • evictionPolicy (EvictionPolicy 枚舉)
    • 作用: 決定當本地緩存達到 cacheSize 限制或 JVM 需要內存時,如何選擇條目進行淘汰(移除)。淘汰僅發生在本地緩存副本,不影響 Redis 主數據。
    • 策略詳解:
      • NONE (無淘汰):
        • 不主動淘汰任何條目。條目一旦加載,除非 Redis 數據變更(通過 Pub/Sub 失效)或 JVM 回收(如使用引用策略),否則常駐內存。
        • 風險: 極易引發 OOM,僅適用于小型、固定、必須常駐的數據集。
      • LRU (最近最少使用 - Least Recently Used):
        • 淘汰原則: 優先淘汰最久未被訪問(讀取或寫入)的條目。
        • 實現: 維護訪問順序鏈表(如鏈表頭代表最近使用)。訪問條目時將其移至鏈表頭;淘汰時移除鏈表尾部的條目。
        • 適用場景: 推薦通用策略。適用于具有時間局部性(最近訪問的很可能再次訪問)的大多數場景。平衡內存使用與緩存命中率。
      • LFU (最不經常使用 - Least Frequently Used):
        • 淘汰原則: 優先淘汰使用頻率最低的條目。
        • 實現: 為每個條目維護訪問計數器。訪問時計數器遞增;淘汰時選擇計數器值最小的條目。需處理計數器老化(防止歷史高頻但當前冷數據長期占用)。
        • 適用場景: 訪問頻率差異顯著且穩定,需長期保留熱點數據的場景(如熱門商品信息)。
      • SOFT (軟引用 - Soft Reference):
        • 淘汰原則: 不基于 cacheSize 主動淘汰。使用 java.lang.ref.SoftReference 包裝緩存值對象。
        • 行為:
          • JVM 堆內存充足時:行為類似強引用,對象不被回收。
          • JVM 堆內存不足(即將 OOM)時:垃圾回收器(GC)優先回收僅被 SoftReference 引用的對象以釋放內存。鍵通常保持強引用。
        • 適用場景: 存儲大型對象或對內存極度敏感,作為防止 OOM 的最后手段。淘汰時機不可控(取決于 GC)。
      • WEAK (弱引用 - Weak Reference):
        • 淘汰原則:SOFT 更激進。使用 java.lang.ref.WeakReference 包裝緩存值對象(鍵可能用 WeakReferenceSoftReference)。
        • 行為: 只要發生 GC,無論內存是否充足,垃圾回收器立即回收僅被 WeakReference 引用的對象。緩存值對象生命周期極短
        • 適用場景: 存儲臨時數據或對內存極度敏感、可接受低命中率的場景(如臨時會話數據)。緩存非常短暫。

3. 寫入模式 (Write Mode)

  • writeMode (WriteMode 枚舉)
    • 作用: 控制通過 RLocalCachedMap 寫入數據時如何與 MapWriter(用于持久化到外部存儲,如數據庫)交互。
    • 模式詳解:
      • WRITE_BEHIND (異步寫后):
        • 行為: 對 Map 的寫入操作先成功寫入本地緩存和 Redis,然后異步調用 MapWriter 寫入外部存儲。
        • 優點: 寫入延遲低,性能高。
        • 缺點: 存在數據丟失風險(外部存儲寫入成功前應用崩潰);外部存儲寫入順序無法嚴格保證。
        • 調優: 配合 writeBehindDelaywriteBehindBatchSize 使用。
      • WRITE_THROUGH (同步直寫):
        • 行為: 對 Map 的寫入操作同步調用 MapWriter 寫入外部存儲。只有 MapWriter 寫入成功后,操作才被視為成功,數據寫入本地緩存和 Redis。
        • 優點: 保證本地緩存/Redis 與外部存儲的強一致性;寫入外部存儲的順序有保證。
        • 缺點: 寫入延遲較高(受外部存儲性能影響)。
        • 錯誤處理: 如果 MapWriter 拋出異常,該異常會直接拋給 Map 操作調用方,數據不會寫入本地緩存和 Redis。

4. 存儲模式 (Store Mode)

  • storeMode (StoreMode 枚舉)

    • 作用: 定義數據存儲的位置和同步范圍。
    • 模式詳解:
      • LOCALCACHE (僅本地緩存):
        • 行為: 數據保存在當前 JVM 實例的本地內存中。寫入 Redis,支持集群內其他實例的數據同步。
        • 特點: 速度最快,無網絡開銷。
        • 缺點: 數據非持久化;實例重啟數據丟失;無法跨實例共享;無分布式一致性保證。
        • 適用場景: 純本地緩存需求,數據不重要或可重建,無需集群共享(如單機應用的臨時計算緩存)。
      • LOCALCACHE_REDIS (本地緩存 + Redis, 默認):
        • 行為: 數據同時寫入當前 JVM 的本地內存 Redis 集群。支持通過 Pub/Sub 機制(syncStrategy)在集群實例間同步緩存變更。
        • 特點: 本地讀取速度快;數據持久化在 Redis;支持分布式共享;通過 syncStrategy 提供一定一致性保證。
        • 適用場景: 推薦模式。需要本地高速讀取 + 分布式數據共享/一致性 + 持久化的場景(如集群部署的共享配置、熱點數據緩存)。
  • storeCacheMiss (boolean)

    • 作用: 控制是否緩存“鍵不存在”的結果。
    • 行為:
      • false (默認): 查詢一個本地緩存和 Redis 中都不存在的鍵時,每次請求都會穿透到 Redis 查詢,造成重復網絡開銷。
      • true (推薦開啟): 首次查詢不存在的鍵時,在本地緩存中存儲一個特殊標記(如 Null 值)。后續對該鍵的請求直接在本地緩存命中此標記,返回“不存在”,避免重復穿透 Redis
    • 優點: 顯著降低對不存在鍵的重復查詢開銷,提升性能(尤其防緩存穿透攻擊)。
    • 注意: 需要配合合適的 timeToLiveevictionPolicy 清理這些“不存在”標記。

5. 同步策略 (Sync Strategy)

  • syncStrategy (LocalCachedMapOptions.SyncStrategy 枚舉)
    • 作用: 當 Redis 中的數據(通過任何客戶端)發生變更時,如何同步更新集群內所有 RLocalCachedMap 實例的本地緩存副本。僅在 storeMode = LOCALCACHE_REDIS 時生效。

    • 策略詳解:

      策略傳輸內容網絡開銷本地行為后續訪問延遲適用場景
      INVALIDATE變更條目的 16字節哈希值收到哈希值,移除對應本地條目數據更新不頻繁;強一致性要求;帶寬敏感
      UPDATE變更條目的完整鍵值對收到鍵值對,更新對應本地條目數據更新頻繁;強一致性要求;可接受帶寬消耗
      • INVALIDATE (失效):
        • 變更廣播:僅廣播變更條目的哈希值(16字節)。
        • 本地動作:其他實例收到哈希值后,移除本地緩存中對應的條目。
        • 后續訪問:下次訪問該鍵需從 Redis 重新加載最新值。
      • UPDATE (更新):
        • 變更廣播:廣播變更條目的完整鍵值對。
        • 本地動作:其他實例收到鍵值對后,直接更新本地緩存中的對應條目(若存在)。
        • 后續訪問:可直接使用本地緩存中已更新的值。

6. 寫入容錯與異步批處理 (Write Resilience & Batching)

  • writeRetryAttempts (int)

    • 作用: 設置向 Redis 寫入操作失敗后的最大重試次數
    • 適用場景: 在網絡不穩定或 Redis 短暫不可用時提高寫入操作的可靠性。
    • 默認值: 通常為 3(具體依賴 Redisson 版本/配置)。
  • writeRetryInterval (long, 單位:毫秒)

    • 作用: 設置每次寫入重試之間的等待間隔
    • 配合:writeRetryAttempts 一同使用。
  • writeBehindDelay (int, 單位:毫秒)

    • 作用: 僅在 writeMode = WRITE_BEHIND 時有效。設置異步寫后任務執行的最大延遲時間。所有更新操作會累積,延遲不超過此值后批量提交給 MapWriter
    • 調優: 值越大,可能累積的批量操作越多,減少 MapWriter 調用次數,提高吞吐量,但數據延遲持久化的風險增大。
  • writeBehindBatchSize (int)

    • 作用: 僅在 writeMode = WRITE_BEHIND 時有效。設置異步寫后任務的批處理大小。當累積的更新操作數量達到此閾值時,立即觸發一次批量提交給 MapWriter,即使未達到 writeBehindDelay
    • 調優: 值越大,單次 MapWriter 調用處理數據越多,吞吐量越高,但單次調用延遲可能增加。與 writeBehindDelay 共同控制批處理行為。

總結與配置建議

  1. 基礎配置 (storeMode, cacheSize, evictionPolicy, timeToLive): 根據數據特性(大小、重要性、更新頻率)和內存限制設定。LOCALCACHE_REDIS + LRU + 合理 cacheSize/timeToLive 是通用起點。storeCacheMiss=true 強烈推薦開啟以優化不存在鍵的查詢。
  2. 一致性策略 (syncStrategy): 在帶寬(INVALIDATE)與讀性能(UPDATE)間權衡。高頻讀低頻寫選 INVALIDATE;高頻寫高頻讀且強一致選 UPDATE
  3. 持久化模式 (writeMode): 需要額外持久化到 DB 時選擇。追求性能選 WRITE_BEHIND(配合調優 writeBehind* 參數);追求強一致選 WRITE_THROUGH
  4. 容錯 (writeRetry*): 網絡環境不穩定時適當增加重試次數和間隔。
  5. 監控與調優: 密切監控本地緩存大小、命中率、網絡帶寬(尤其 UPDATE 策略)和 Redis 負載,根據實際情況調整參數(如 cacheSize, timeToLive, writeBehind*)。

示例配置片段 (Java):

LocalCachedMapOptions<String, MyData> options = LocalCachedMapOptions.<String, MyData>defaults().cacheSize(1000)                      // 本地緩存最大1000條.timeToLive(10 * 60 * 1000)           // 本地條目10分鐘過期.evictionPolicy(EvictionPolicy.LRU)   // 使用LRU淘汰.storeMode(StoreMode.LOCALCACHE_REDIS) // 本地+Redis存儲.storeCacheMiss(true)                 // 緩存"不存在"結果.syncStrategy(SyncStrategy.UPDATE)    // 使用UPDATE同步策略.writeMode(WriteMode.WRITE_BEHIND)    // 異步寫后模式.writeBehindDelay(500)                // 最大延遲500ms批處理.writeBehindBatchSize(50)             // 每批最多50條.writeRetryAttempts(5)                // 寫入重試5次.writeRetryInterval(1000);            // 重試間隔1秒RLocalCachedMap<String, MyData> hotDataCache = redisson.getLocalCachedMap("hotDataCache", options);

通過合理配置這些參數,RLocalCachedMap 能在分布式系統中有效平衡性能、內存消耗、數據一致性和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915674.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915674.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915674.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Unity3D實例-功能-移動】角色移動-通過WSAD(Rigidbody方式)

你是否曾夢想在虛擬世界中自由翱翔&#xff0c;像海豚一樣在海洋自由穿梭&#xff0c;或者像宇航員一樣在宇宙中盡情探索&#xff1f;今天&#xff0c;我們就來聊聊如何在Unity中使用Rigidbody來實現角色移動。 廢話不多說&#xff0c;走&#xff0c;讓我們馬上來一探究竟&…

Vue接口平臺學習十一——業務流測試

效果圖及簡單說明 與之前的用例列表相似布局&#xff0c;也分左右&#xff0c;左邊用于顯示測試流程的名稱&#xff0c;右邊用于顯示流程相關信息。 左側點擊添加&#xff0c;直接增加一個新的業務流。 右側是點擊的業務流詳情&#xff0c;展示名稱&#xff0c;名稱的編輯保存&…

碳化硅缺陷分類與原因

01一、碳化硅晶體材料中的缺陷到底是什么&#xff1f;碳化硅晶體材料中的缺陷是指在晶體生長、加工或使用過程中出現的不完美結構。這些缺陷可能表現為晶體內部的裂紋、表面的凹坑、原子排列的錯誤等。雖然缺陷看起來微不足道&#xff0c;但它們卻可能對晶體的電學、熱學和機械…

Jenkins 實現項目的構建和發布

作者&#xff1a;小凱 沉淀、分享、成長&#xff0c;讓自己和他人都能有所收獲&#xff01; 本文的宗旨在于通過簡單干凈實踐的方式教會讀者&#xff0c;如何在 Docker 中部署 Jenkins&#xff0c;并通過 Jenkins 完成對項目的打包構建并在 Docker 容器中部署。 Jenkins 的主要…

Django接口自動化平臺實現(三)

3.2 后臺 admin 添加數據 1&#xff09;注冊模型類到 admin&#xff1a; 1 from django.contrib import admin2 from . import models3 4 5 class ProjectAdmin(admin.ModelAdmin):6 list_display ("id", "name", "proj_owner", "tes…

CentOS 7 配置環境變量常見的4種方式

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/cat…

k8s:手動創建PV,解決postgis數據庫本地永久存儲

1.離線環境CPU:Hygon C86 7285 32-core Processor 操作系統&#xff1a;麒麟操作系統 containerd&#xff1a;1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey&#xff1a;3.1.10 Harbor:2.13.1 Postgis:17-3.52創建StorageClass2.1創建 apiVersion: storage.k8s.io/v1kin…

谷歌瀏覽器Chrome的多用戶配置文件功能

谷歌瀏覽器Chrome的多用戶配置文件功能允許在同一設備上創建多個獨立賬戶,每個賬戶擁有完全隔離的瀏覽數據(如書簽、歷史記錄、擴展、Cookies等),非常適合工作/生活賬戶分離、家庭共享或臨時多賬號登錄場景。 如何使用Chrome的多用戶配置文件功能? 一、創建與切換用戶 1.…

傲軟錄屏 專業高清錄屏軟件 ApowerREC Pro 下載與保姆級安裝教程!!

小編今天分享一款強大的電腦屏幕錄像軟件 傲軟錄屏 ApowerREC&#xff0c;能夠幫助用戶錄制中電腦桌面屏幕上的所有內容&#xff0c;包括畫面和聲音&#xff0c;支持全屏錄制、區域錄制、畫中畫以及攝像頭錄制等多種視頻錄制模式&#xff0c;此外&#xff0c;還支持計劃任務錄制…

【計算機網絡】MAC地址與IP地址:網絡通信的雙重身份標識

在計算機網絡領域&#xff0c;MAC地址與IP地址是兩個核心概念&#xff0c;它們共同構成了數據傳輸的基礎。理解二者的區別與聯系&#xff0c;對于網絡配置、故障排查及安全管理至關重要。 一、基本概念 1. MAC地址&#xff08;物理地址&#xff09; 定義&#xff1a;固化在網絡…

如何用keepAlive實現標簽頁緩存

什么是KeepAlive首先&#xff0c;要明確所說的是TCP的 KeepAlive 還是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念&#xff0c;不能混為一談。實際上HTTP的KeepAlive寫法是Keep-Alive&#xff0c;跟TCP的KeepAlive寫法上也有不同。TCP的KeepAliveTCP…

數據庫隔離級別

隔離級別決定了事務之間的可見性規則&#xff0c;直接影響數據庫的并發性能和數據一致性。SQL 標準定義了 4 種隔離級別&#xff0c;從低到高依次為&#xff1a;讀未提交→讀已提交→可重復讀→串行化。隔離級別越高&#xff0c;對并發問題的解決能力越強&#xff0c;但對性能的…

基于Python flask的電影數據分析及可視化系統的設計與實現,可視化內容很豐富

摘要&#xff1a;基于Python的電影數據分析及可視化系統是一個應用于電影市場的數據分析平臺&#xff0c;旨在為廣大電影愛好者提供更準確、更詳細、更實用的電影數據。數據分析部分主要是對來自貓眼電影網站上的數據進行清洗、分類處理、存儲等步驟&#xff0c;數據可視化則是…

TCP通訊開發注意事項及常見問題解析

文章目錄一、TCP協議特性與開發挑戰二、粘包與拆包問題深度解析1. 成因原理2. 典型場景與實例驗證3. 系統化解決方案接收方每次讀取10字節2. 丟包檢測與驗證工具3. 工程化解決方案四、連接管理關鍵實踐1. 超時機制設計2. TIME_WAIT狀態優化3. 異常處理最佳實踐五、高性能TCP開發…

2021 RoboCom 世界機器人開發者大賽-本科組(復賽)解題報告 | 珂學家

前言 題解 睿抗機器人開發者大賽CAIP-編程技能賽-歷年真題 匯總 2021 RoboCom 世界機器人開發者大賽-本科組&#xff08;復賽&#xff09;解題報告 感覺這個T1特別有意思&#xff0c;非典型題&#xff0c;著重推演下結論。 T2是一道玄學題&#xff0c;但是涉及一些優化技巧…

《計算機“十萬個為什么”》之 MQ

《計算機“十萬個為什么”》之 MQ &#x1f4e8; 歡迎來到消息隊列的奇妙世界&#xff01; 在這篇文章中&#xff0c;我們將探索 MQ 的奧秘&#xff0c;從基礎概念到實際應用&#xff0c;讓你徹底搞懂這個分布式系統中不可或缺的重要組件&#xff01;&#x1f680; 作者&#x…

Django母嬰商城項目實踐(七)- 首頁數據業務視圖

7、首頁數據業務視圖 1、介紹 視圖(View)是Django的MTV架構模式的V部分,主要負責處理用戶請求和生成相應的響應內容,然后在頁面或其他類型文檔中顯示。 也可以理解為視圖是MVC架構里面的C部分(控制器),主要處理功能和業務上的邏輯。我們習慣使用視圖函數處理HTTP請求,…

android 12 的 aidl for HAL 開發示例

說明&#xff1a;aidl for HAL 這種機制&#xff0c;可以自動生成java代碼&#xff0c;app調用可以獲取中間過程的jar包&#xff0c;結合反射調用 ServiceManager.getService 方法&#xff0c;直接獲取 HAL 服務&#xff0c;不再需要費力在framework層添加代碼&#xff0c;方便…

網絡安全滲透攻擊案例實戰:某公司內網為目標的滲透測試全過程

目錄一、案例背景二、目標分析&#xff08;信息收集階段&#xff09;&#x1f310; 外部信息搜集&#x1f9e0; 指紋識別和端口掃描三、攻擊流程&#xff08;滲透測試全過程&#xff09;&#x1f3af; 步驟1&#xff1a;Web漏洞利用 —— 泛微OA遠程命令執行漏洞&#xff08;CV…

AI視頻-劇本篇學習筆記

1.提示詞萬能框架是什么:ai扮演的角色做什么&#xff1a;解決什么問題怎么做&#xff1a;標準2、劇本模版假設你是一位擁有30年電影拍攝經驗的世界頂級導演&#xff0c;擁有豐富的電影拍攝經驗和高超的電影拍攝技術&#xff0c;同時也擅長各種影片的劇本創作。我需要你仔細閱讀…