Redisson
本节解释如何使用 tio-boot 通过 Redisson 整合 redis
Redisson 简介
什么是 Redisson
Redisson 是一个强大的 Redis 客户端,提供了丰富的分布式数据结构和工具,适用于 Java 应用的高可扩展性和高并发需求。
Redisson 的主要用途
- 分布式数据结构:Redisson 提供标准 Java 集合接口的分布式版本,如
Map
、Set
、List
、Queue
、Deque
等,便于在分布式环境下进行数据共享和协调。 - 分布式锁和同步器:Redisson 还支持多种分布式锁、同步器(如
CountDownLatch
、Semaphore
),帮助解决多线程和多实例之间的同步问题。 - 对象映射:Redisson 提供了对象映射功能(RORM),可以将 Java 对象直接映射到 Redis 数据结构,简化了数据操作。
使用场景
- 高级缓存需求:如果你的应用程序需要复杂的缓存策略或依赖 Redis 的高级数据结构(如排序集、哈希等),Redisson 是理想的选择。
- 分布式系统:在分布式系统中,Redisson 的分布式锁、分布式集合和同步器能帮助在多个节点之间实现数据共享、任务协调、故障恢复等功能。
Redisson 与 Jedis 的区别
虽然 Redisson 和 Jedis 都是 Redis 的 Java 客户端,但两者设计理念和功能侧重点不同:
- Redisson:侧重于提供高级分布式数据结构和工具,支持分布式锁、同步器、队列、缓存等高级功能。它可以应用于复杂的分布式系统中,尤其是需要集群、主从、哨兵模式的场景。
- Jedis:作为轻量级的 Redis 客户端,Jedis 更加简洁,提供与 Redis 的原生命令直接交互的接口。适用于单机或简单的 Redis 操作场景。
Redisson 提供更多高级功能,适合对分布式特性和集群支持有需求的系统;而 Jedis 则适合需要直接操作 Redis 并追求轻量级性能的应用。
如何使用 Redisson 连接 Redis
以下是使用 Redisson 连接 Redis 的步骤,包括如何配置依赖、初始化客户端及使用方式。
1. 添加 Redisson 依赖
在 pom.xml
文件中添加 Redisson 的 Maven 依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.0</version>
</dependency>
注意:Redisson 依赖于 Netty,可能会增加项目的打包体积,因此使用时需根据项目需求权衡。
2. 创建 Redisson 配置类
接下来,创建一个配置类,初始化 Redisson 客户端:
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import com.litongjava.annotation.ABean;
import com.litongjava.annotation.AConfiguration;
@AConfiguration
public class RedissonConfig {
@ABean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://192.168.3.9:6379")
.setDatabase(0)
.setPassword("123456");
return Redisson.create(config);
}
}
在此配置中:
- 使用
Config
类配置 Redis 的连接信息,如 IP 地址、端口、数据库索引及密码。 Redisson.create(config)
创建并返回RedissonClient
实例。@ABean(destroyMethod = "shutdown")
确保应用程序关闭时,Redisson 客户端资源能够正确释放。
3. 使用 Redisson 客户端
完成配置后,可以在应用中注入 RedissonClient
并使用它进行 Redis 操作,例如分布式锁和缓存:
package com.litongjava.tio.web.hello.controller;
import org.redisson.api.RBucket;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import com.litongjava.annotation.RequestPath;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.tio.http.common.HttpRequest;
import lombok.extern.slf4j.Slf4j;
@RequestPath("/redisson")
@Slf4j
public class RedissonTestController {
@RequestPath("/test")
public String test(HttpRequest request) {
// 注入 RedissonClient
RedissonClient redissonClient = Aop.get(RedissonClient.class);
// 获取分布式锁
RLock lock = redissonClient.getLock("myLock");
lock.lock();
// 获取或创建 Redis 的存储桶对象
RBucket<String> bucket = redissonClient.getBucket("yourKey");
String value = bucket.get();
// 如果 Redis 中没有该值,则计算并存储新值
if (value == null) {
log.info("计算新的value");
value = "yourValue";
bucket.set(value);
}
try {
// 执行业务逻辑
} finally {
// 释放锁
lock.unlock();
}
return value;
}
}
该示例展示了如何使用 RedissonClient:
- 使用
RLock
来实现分布式锁。 - 使用
RBucket
操作 Redis 的键值对。 - Redisson 提供了丰富的 API,可以支持诸如列表、哈希、集合、布隆过滤器等复杂数据结构。
通过 Redisson,您可以轻松地利用 Redis 的强大功能,实现分布式数据结构和分布式锁等高级功能,有效解决分布式系统中的一致性和同步问题。