Redisson
17.1.Redisson 简介
17.1.1.什么是 Redisson
Redisson 是一个提供了多种分布式和可扩展 Java 数据结构的 Redis 客户端。
Redisson 库的用途
- 分布式实现:Redisson 提供了标准 Java 集合接口的分布式和可扩展实现,如
Map
、Set
、List
、Queue
、Deque
等。 - 附加功能:除了数据结构,Redisson 还提供分布式锁、同步器(如 CountDownLatch、Semaphore)、发布/订阅、集群支持等功能。
- 对象映射:Redisson 还包括一个对象映射框架(RORM),可以将 Java 对象直接映射到 Redis 数据结构中。
使用场景
- 高级缓存需求:如果你的应用程序有复杂的缓存需求,或者你需要利用 Redis 提供的高级数据结构和功能,Redisson 是一个很好的选择。
- 分布式系统:在分布式系统中,Redisson 的分布式数据结构和同步器非常有用,可以帮助处理不同实例间的数据共享和协调问题。
17.1.2.Redisson 和 Jedis 的区别
Redisson 不依赖于 Jedis。Redisson 和 Jedis 都是用于与 Redis 数据库交互的 Java 客户端,但它们是独立开发的,各自实现了与 Redis 交互的不同机制和 API。
Redisson:它使用自己的客户端来连接和操作 Redis。Redisson 提供了一系列高级功能,如分布式数据结构、分布式锁、可靠话题等,还支持多种集群模式,如主从、哨兵、集群等。
Jedis:这是一个比较轻量级的客户端,主要提供了一个直接且简洁的 API 来与 Redis 进行交互。它支持各种基本的 Redis 操作,但不提供 Redisson 那样的高级分布式特性。
由于两者提供了不同的特性和优势,开发者会根据应用程序的具体需求和场景来选择使用 Redisson 或 Jedis。例如,需要高级分布式特性和集群支持时,可能会倾向于选择 Redisson;而对于简单的 Redis 操作,Jedis 可能更为合适。
17.2.使用 Redisson 连接 redis
要使用 Redisson 连接到 Redis,首先需要添加 Redisson 的 Maven 依赖到你的项目中。然后,可以创建一个新的配置类来配置和初始化 Redisson 客户端。以下是这个过程的详细说明:
. 添加 Redisson 依赖
在你的 pom.xml
文件中,添加 Redisson 的依赖。例如:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.0</version>
</dependency>
redisson 依赖了 netty
请确保使用最新的版本号。
创建 Redisson 配置类
创建一个新的配置类用于初始化 Redisson 客户端。你可以使用 Redisson.create()
方法和 Config
类来配置 Redisson。例如:
package com.litongjava.tio.boot.hello.config;
import com.litongjava.jfinal.aop.annotation.Bean;
import com.litongjava.jfinal.aop.annotation.Configuration;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
@AConfiguration
public class RedissonConfig {
@ABean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://localhost:6379")
.setDatabase(0);
// 如果你的 Redis 设置了密码
// .setPassword("yourPassword");
return Redisson.create(config);
}
}
在这个例子中:
Config
类用于配置 Redisson。useSingleServer()
方法指定了单节点模式。setAddress("redis://localhost:6379")
指定 Redis 服务器的地址和端口。setDatabase(0)
指定默认数据库索引。Redisson.create(config)
创建并返回 Redisson 客户端实例。@ABean(destroyMethod = "shutdown")
注解确保当应用程序关闭时,Redisson 客户端也会被正确关闭。
3. 使用 Redisson 客户端
一旦配置类设置好,你可以在你的应用程序中注入 RedissonClient
并使用它来与 Redis 交互。例如:
package com.litongjava.tio.boot.hello.AController;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.jfinal.aop.Autowired;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.annotation.RequestPath;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBucket;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
@AController
@RequestPath("/redisson")
@Slf4j
public class RedissonTestController {
@RequestPath("/test")
public String test(HttpRequest request) {
String value = null;
// 使用 Redisson 客户端
RedissonClient redissonClient = Aop.get(RedissonClient.class);
// 例如,获取一个锁
RLock lock = redissonClient.getLock("myLock");
lock.lock();
// 创建或获取一个存储桶对象
RBucket<String> bucket = redissonClient.getBucket("yourKey");
//获取支持
value = bucket.get();
if (value == null) {
log.info("计算新的value");
value = "yourValue";
// 向 Redis 中设置值
bucket.set(value);
}
try {
// 处理你的业务逻辑
} finally {
lock.unlock();
}
return value;
}
}
请注意,Redisson 的 API 远不止于此。它提供了对许多复杂数据结构的支持,比如列表、映射、集合、分布式锁等,这些都可以通过 RedissonClient
实例来访问和操作。
这个例子演示了如何在你的服务类中使用 RedissonClient
。你可以使用 Redisson 提供的丰富 API 来实现复杂的分布式功能,如分布式锁、集合、映射等。