目录
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: null
database: 0
connectionPoolSize: 64
connectionMinimumIdleSize: 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();
// 获取分布式List
RList<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