目錄
1. 什么是Redisson
2. 為什么要用Redisson
3. 環境準備和配置
4. 基礎使用方法
5. 分布式數據結構
6. 分布式鎖詳解
7. 分布式服務
8. 實際應用場景
9. 最佳實踐
10. 常見問題解答
總結
1. 什么是Redisson
簡單理解
想象一下,Redis就像一個超級強大的"內存倉庫",而Redisson就是幫你更方便地使用這個倉庫的"管理工具"。
官方定義: Redisson是一個在Redis基礎上實現的Java分布式對象和服務框架,基于Netty框架實現。
核心特點
- 簡單易用: 像使用本地Java對象一樣使用分布式對象
- 功能豐富: 提供了50多種分布式對象和服務
- 高性能: 基于Netty異步框架
- 企業級: 支持集群、哨兵、單機等多種部署模式
2. 為什么要用Redisson
傳統方式的問題
// 傳統Redis客戶端使用方式
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
String value = jedis.get("key");
jedis.close();
問題:
- 代碼繁瑣,需要手動管理連接
- 沒有分布式對象的概念
- 實現分布式鎖等功能需要大量代碼
Redisson的優勢
// Redisson使用方式
RedissonClient redisson = Redisson.create();
RBucket<String> bucket = redisson.getBucket("key");
bucket.set("value");
String value = bucket.get();
優勢:
- 代碼簡潔,自動管理連接
- 提供豐富的分布式數據結構
- 內置分布式鎖、信號量等高級功能
3. 環境準備和配置
3.1 添加依賴
Maven:
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.24.3</version>
</dependency>
Gradle:
implementation 'org.redisson:redisson:3.24.3'
3.2 基礎配置
單機模式
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("your_password") // 如果有密碼.setDatabase(0); // 數據庫編號RedissonClient redisson = Redisson.create(config);
集群模式
Config config = new Config();
config.useClusterServers().addNodeAddress("redis://127.0.0.1:7004").addNodeAddress("redis://127.0.0.1:7001").addNodeAddress("redis://127.0.0.1:7000");RedissonClient redisson = Redisson.create(config);
配置文件方式
# redisson.yaml
singleServerConfig:address: "redis://127.0.0.1:6379"password: nulldatabase: 0connectionPoolSize: 64connectionMinimumIdleSize: 24
// 使用配置文件
Config config = Config.fromYAML(new File("redisson.yaml"));
RedissonClient redisson = Redisson.create(config);
4. 基礎使用方法
4.1 基本數據操作
public class RedissonBasicExample {public static void main(String[] args) {// 創建客戶端RedissonClient redisson = Redisson.create();// 字符串操作RBucket<String> bucket = redisson.getBucket("myKey");bucket.set("Hello Redisson!");String value = bucket.get();System.out.println(value); // 輸出: Hello Redisson!// 設置過期時間bucket.set("tempValue", 30, TimeUnit.SECONDS);// 關閉客戶端redisson.shutdown();}
}
4.2 異步操作
// 異步設置值
RBucket<String> bucket = redisson.getBucket("asyncKey");
RFuture<Void> future = bucket.setAsync("async value");// 異步獲取值
RFuture<String> getFuture = bucket.getAsync();
getFuture.whenComplete((value, exception) -> {if (exception == null) {System.out.println("異步獲取到的值: " + value);} else {exception.printStackTrace();}
});
5. 分布式數據結構
5.1 分布式List
public class DistributedListExample {public static void main(String[] args) {RedissonClient redisson = Redisson.create();// 獲取分布式ListRList<String> list = redisson.getList("myList");// 像普通List一樣使用list.add("第一個元素");list.add("第二個元素");list.add(1, "插入的元素"); // 在索引1處插入// 遍歷for (String item : list) {System.out.println(item);}// 獲取大小System.out.println("List大小: " + list.size());// 刪除元素list.remove("第一個元素");redisson.shutdown();}
}
5.2 分布式Set
public class DistributedSetExample {public static void main(String[] args) {RedissonClient redisson = Redisson.create();RSet<String> set = redisson.getSet("mySet");// 添加元素set.add("apple");set.add("banana");set.add("apple"); // 重復元素不會被添加// 檢查是否包含boolean contains = set.contains("apple");System.out.println("包含apple: " + contains