目录
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