Redisson使用詳解


一、Redisson 核心特性與適用場景

Redisson 是基于 Redis 的 Java 客戶端,提供分布式對象、鎖、集合和服務,簡化分布式系統開發。
典型應用場景

  1. 分布式鎖:防止重復扣款、超賣控制(如秒殺庫存)。
  2. 數據共享:跨服務共享 Map、List、Set 等集合數據。
  3. 限流與異步任務:通過信號量(Semaphore)控制并發量,通過隊列處理異步任務。
  4. 實時通信:基于發布訂閱模式實現消息通知。

二、Redisson 快速集成

1. 依賴配置

Spring Boot 中引入依賴(建議選擇最新穩定版本):

<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.5</version>
</dependency>
2. 配置類示例

配置單機模式 Redis 連接:

@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("yourpassword").setDatabase(0);return Redisson.create(config);}
}

注:集群模式使用 useClusterServers(),哨兵模式使用 useSentinelServers()


三、核心功能詳解

1. 基本數據結構操作

? RBucket(鍵值對)

RBucket<String> bucket = redissonClient.getBucket("user:1");
bucket.set("張三");  // 存儲字符串
String value = bucket.get();  // 讀取值

? RList(列表)

RList<String> list = redissonClient.getList("tasks");
list.add("task1");  // 添加元素

? RMap(哈希表)

RMap<String, Integer> map = redissonClient.getMap("scores");
map.put("Alice", 90);  // 存儲鍵值對
2. **分布式鎖實現
2.1 可重入鎖(RLock)
RLock lock = redissonClient.getLock("orderLock");
try {if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {  // 等待10秒,鎖自動釋放時間30秒// 執行業務邏輯}
} finally {lock.unlock();  // 釋放鎖
}

特性
? 看門狗機制:后臺線程自動續期鎖,防止業務未完成鎖超時釋放。
? 可重入性:同一線程可多次獲取鎖(計數器實現)。

2.2 其他鎖類型

? 公平鎖(FairLock):按請求順序獲取鎖,避免饑餓問題。
? 聯鎖(MultiLock):同時獲取多個鎖,保證多資源操作的原子性。
? 紅鎖(RedLock):跨多個獨立 Redis 節點實現高可用鎖(需謹慎使用)。


四、高級功能與最佳實踐

1. 信號量(Semaphore)

控制并發訪問資源數量:

RSemaphore semaphore = redissonClient.getSemaphore("apiLimit");
semaphore.trySetPermits(100);  // 設置最大并發數
semaphore.acquire();          // 獲取許可
// 執行業務
semaphore.release();          // 釋放許可
2. 發布訂閱模型
  • 發布消息:
RTopic topic = redissonClient.getTopic("news");
topic.publish("系統維護通知");
  • 訂閱消息:
topic.addListener(String.class, (channel, msg) -> {System.out.println("收到消息:" + msg);
});

五、生產環境注意事項

  1. 連接池配置

    redisson:threads: 64nettyThreads: 32
    

    根據并發量調整線程數,避免資源爭搶。

  2. 序列化優化
    默認使用 Kryo 編解碼器,復雜對象建議使用 JSON 或 Protobuf。

  3. 異常處理

    • 鎖釋放前檢查持有者:if (lock.isHeldByCurrentThread()) lock.unlock()
    • 網絡波動時啟用自動重連:config.useSingleServer().setRetryInterval(1500)

六、典型問題解決方案

  1. 鎖續期失敗:檢查看門狗線程是否被阻塞(避免在鎖內執行耗時操作)。
  2. Redis 集群切換主節點:Redisson 自動感知拓撲變化,需配置合理的超時時間。
  3. 內存泄漏:監控 RMap 等數據結構的使用,及時清理過期數據。

七、Lettuce與Redisson的區別

以下是 Lettuce 與 Redisson 的核心區別解析,結合功能特性、適用場景及設計理念,幫助開發者選擇適合的 Redis 客戶端:


設計目標與定位
維度LettuceRedisson
核心定位高性能、全功能的 Redis 命令客戶端基于 Redis 的分布式中間件(內存數據網格)
設計理念提供底層 Redis 協議操作支持封裝分布式功能(如鎖、隊列)
適用場景緩存、消息隊列、簡單數據結構操作分布式系統、微服務架構中的復雜業務邏輯
與 Redis 關系直接操作 Redis 命令基于 Redis 實現分布式服務抽象

關鍵差異
Lettuce 是純粹的 Redis 客戶端,專注于命令執行與性能優化;Redisson 是分布式服務框架,提供基于 Redis 的高級分布式功能。


核心功能對比
1. 線程安全與連接管理
  • Lettuce

    • 單連接線程安全,支持多線程共享連接(非阻塞操作下)。
    • 基于 Netty 的非阻塞 I/O,異步性能優異,適合高并發場景。
    • 需依賴外部連接池(如 Commons Pool2)。
  • Redisson

    • 內置線程安全分布式對象(如 RMapRList)。
    • 自動管理連接池,支持讀寫分離和負載均衡。
    • 提供“看門狗”機制保障鎖續期,避免分布式鎖超時失效。
2. 高級功能支持
  • Lettuce

    • 支持同步/異步/響應式編程,原生兼容 Redis 集群、哨兵、管道等特性。
    • 提供靈活的序列化配置(如 JSON、Protobuf)。
  • Redisson

    • 內置分布式鎖、信號量(Semaphore)、延遲隊列、分布式原子類等工具。
    • 支持與 Spring Session 集成實現分布式會話共享。
    • 提供 Tomcat Session Manager、Spring Cache 等擴展。
3. 性能與擴展性
維度LettuceRedisson
I/O 模型非阻塞異步(Netty)非阻塞異步(Netty)
吞吐量高(適合高頻簡單操作)較高(因功能復雜,略低于 Lettuce)
擴展性依賴外部實現復雜功能(如分布式鎖需自行封裝)開箱即用分布式功能

性能場景示例

  • 單節點 10 萬 QPS 緩存查詢:Lettuce 性能更優(輕量級命令執行)。
  • 分布式鎖搶購場景:Redisson 更高效(內置鎖續期與重試機制)。

適用場景推薦
1. 選擇 Lettuce 的情況
  • 需要直接執行 Redis 命令(如 GET/SET)或使用原生數據結構。
  • 項目基于 Spring Boot 且無需復雜分布式功能。
  • 高并發場景下追求極致性能(如緩存擊穿防護)。
2. 選擇 Redisson 的情況
  • 需要分布式鎖、延遲隊列、分布式計數器等高級功能。
  • 微服務架構中需共享分布式對象(如跨服務共享 Map)。
  • 與 Spring Cloud 集成實現限流、熔斷等治理需求。
3. 混合使用方案
  • Lettuce + Redisson
    • Lettuce 處理基礎緩存操作(高性能)。
    • Redisson 管理分布式鎖和集合(功能豐富)。
      • 示例配置:
    # Spring Boot 配置
    spring:redis:lettuce:pool:max-active: 50
    redisson:config: classpath:redisson.yaml
    

總結與建議
決策因素LettuceRedisson
開發效率高(簡單命令)高(開箱即用功能)
學習成本較高(需掌握分布式概念)
性能優先級優先選擇次要選擇
功能豐富度基礎全面

最終建議

  • 中小型項目:優先使用 Lettuce(Spring Boot 默認集成,維護簡單)。
  • 分布式系統:必選 Redisson,或結合 Lettuce 補充基礎操作。
  • 性能敏感型場景:Lettuce 作為主力,Redisson 僅用于必要功能。

參考資料

  • Redisson 官方文檔

拓展

Lettuce使用詳解

RedisTemplate使用詳解

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

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

相關文章

從代碼學習深度學習 - GRU PyTorch版

文章目錄 前言一、GRU模型介紹1.1 GRU的核心機制1.2 GRU的優勢1.3 PyTorch中的實現二、數據加載與預處理2.1 代碼實現2.2 解析三、GRU模型定義3.1 代碼實現3.2 實例化3.3 解析四、訓練與預測4.1 代碼實現(utils_for_train.py)4.2 在GRU.ipynb中的使用4.3 輸出與可視化4.4 解析…

Flask學習筆記 - 項目結構 + 路由

前言 待業家中繼續學習。 Flask 項目結構 my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes/ -- 將不同功能模塊的路由分開管理 │ │ ├── __init__.py │ │ ├── main.py -- 主模塊的路由 │ │ └── auth.py -- 認證相關的路…

SQL 轉 PHP Eloquent、Doctrine ORM, 支持多數據庫

SQL 轉 PHP 說明 在 PHP 開發中&#xff0c;常使用 ORM&#xff08;如 Eloquent、Doctrine&#xff09;操作數據庫。手寫 ORM 模型繁瑣&#xff0c;gotool.top 提供 SQL 轉 PHP 工具&#xff0c;可自動生成 PHP 代碼&#xff0c;提高開發效率。 特色 支持 Laravel Eloquent …

【Python】Python 環境 + Pycharm 編譯器 官網免費下載安裝(圖文教程,新手安裝,Windows 10 系統)

目錄 Python 環境的下載安裝第一步 進入官網第二步 找到匹配 windows 系統的 python 下載頁面第三步 根據電腦 cpu 架構選擇 python 版本第四步 安裝 python 環境第五步 驗證 python 環境變量 Pycharm 的下載安裝第一步 進入官網第二步 安裝 Pycharm Community Edition第三步 第…

基于javaweb的SpringBoot圖片管理系統圖片相冊系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

局域網:電腦或移動設備作為主機實現局域網訪問

電腦作為主機 1. 啟用電腦的網絡發現、SMB功能 2. 將訪問設備開啟WIFI或熱點&#xff0c;用此電腦連接&#xff1b;或多臺設備連接到同一WIFI 3. 此電腦打開命令行窗口&#xff0c;查看電腦本地的IP地址 Win系統&#xff1a;輸入"ipconfig"&#xff0c;回車后如圖 4.…

use_tempaddr 筆記250405

use_tempaddr 筆記250405 use_tempaddr 是 Linux 系統中用于控制 IPv6 臨時隱私地址生成策略 的關鍵參數。以下是其詳細說明&#xff1a; &#x1f4dc; 參數定義 路徑&#xff1a; /proc/sys/net/ipv6/conf/<接口>/use_tempaddr默認值&#xff1a; 1&#xff08;大多數…

NO.66十六屆藍橋杯備戰|基礎算法-貪心-區間問題|凌亂的yyy|Rader Installation|Sunscreen|牛欄預定(C++)

區間問題是另?種?較經典的貪?問題。題??對的對象是?個?個的區間&#xff0c;讓我們在每個區間上做出取舍。 這種題?的解決?式?般就是按照區間的左端點或者是右端點排序&#xff0c;然后在排序之后的區間上&#xff0c;根據題?要求&#xff0c;制定出相應的貪?策略&…

用C語言控制鍵盤上的方向鍵

各位同學&#xff0c;大家好&#xff01;相信大家在學習C語言的過程中&#xff0c;都和我一樣&#xff0c;經常使用scanf函數來接受字符&#xff0c;數字&#xff0c;這些標準輸入信息&#xff0c;來實現自己設計的程序效果。 而我突然有一天&#xff08;對就是今天&#xff09…

特殊的質數肋骨--dfs+isp

1.dfs全排列組數&#xff0c;an記得還原 2.如果范圍確定且只比較質數&#xff0c;isp比線性篩快&#xff0c;主要這個范圍太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…

定積分的應用(4.39-4.48)

battle cry 前言4.394.404.414.424.434.444.454.464.474.48 前言 題目確實比較多。slow down and take your time. 4.39 狂算了一遍&#xff0c;然后發現不是計算出問題了&#xff0c;是積分上下限寫錯了。還有把函數代進去也出了一點問題。 點火公式一家人我不記得&#x…

如何高效使用 Ubuntu 中文官方網站

Ubuntu 中文官方網站 一、快速導航與核心模塊 首頁焦點區 頂部菜單欄:快速訪問「下載」「文檔」「支持」「商店」等核心功能。輪播圖區:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 訂閱服務)。搜索框:支持中文關鍵詞搜索(如 "邊緣計算"),…

form實現pdf文件轉換成jpg文件

說明&#xff1a; 我希望將pdf文件轉換成jpg文件 請去下載并安裝 Ghostscript&#xff0c;gs10050w64.exe 配置環境變量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路徑&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 輸出文件目錄&#xff1a;C:\Users\wan…

Spring 核心技術解析【純干貨版】- XVIII:Spring 網絡模塊 Spring-WebSocket 模塊精講

在現代 Web 開發中&#xff0c;實時通信已成為提升用戶體驗的關鍵技術之一。傳統的 HTTP 輪詢方式存在較高的延遲和帶寬開銷&#xff0c;而 WebSocket 作為一種全雙工通信協議&#xff0c;能夠在客戶端和服務器之間建立持久連接&#xff0c;實現高效的雙向數據傳輸。 Spring 框…

VirtualBox安裝FnOS

1.下載FnOS鏡像 下載網址&#xff1a; https://www.fnnas.com/2.創建虛擬機 虛擬機配置如圖所示&#xff08;注意操作系統類型和網卡配置&#xff09; &#xff08;注意啟動順序&#xff09; 3.啟動虛擬機 網卡類型選擇橋接的Virtual Adapter 如果沒有IP地址或者IP地址無法…

java根據集合中對象的屬性值大小生成排名

1&#xff1a;根據對象屬性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…

grep命令: 過濾

[rootxxx ~]# grep root /etc/passwd [rootxxx ~]# grep -A 2 root /etc/passwd -A #匹配行后兩行 [rootxxx ~]# grep -B 2 root /etc/passwd -B #匹配行前兩行 [rootxxx ~]# grep -C 2 root /etc/passwd -C #前后2行 [rootxxx ~]# grep -n root /…

二十種中藥果實識別分類系統,Python/resnet18/pytorch

二十種中藥果實識別分類系統,Python/resnet18/pytorch 基于pytorch訓練, resnet18網絡&#xff0c;可用于訓練其他分類問題&#xff0c;也可自己重新訓練 20類中藥材具體包括&#xff1a;(1) 補骨脂&#xff0c;(2) 草豆蔻&#xff0c;(3) 川楝子&#xff0c;(4) 地膚子&…

SpringBoot啟動run方法分析

SpringBoot啟動run方法分析 1.場景引入 在項目啟動的時候&#xff0c;有時候我們需要在啟動的時候&#xff0c;執行一些邏輯。 比如說&#xff0c;項目啟動的時候&#xff0c;我想把一些熱門商品的數據加載到緩存中去&#xff1b; 比如說&#xff0c;自定義了一個netty服務…

Linux信號——信號的處理(3)

信號是什么時候被處理&#xff1f; 進程從內核態&#xff0c;切換到用戶態的時候&#xff0c;信號會被檢測處理。 內核態&#xff1a;操作系統的狀態&#xff0c;權限級別高 用戶態&#xff1a;你自己的狀態 內核態和用戶態 進程地址空間第三次 所謂的系統調用本質其實是一堆…