Skip to content

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 依赖:

xml
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson</artifactId>
  <version>3.16.0</version>
</dependency>

注意:Redisson 依赖于 Netty,可能会增加项目的打包体积,因此使用时需根据项目需求权衡。

2. 创建 Redisson 配置类 ​

接下来,创建一个配置类,初始化 Redisson 客户端:

java
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import nexus.io.annotation.ABean;
import nexus.io.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 操作,例如分布式锁和缓存:

java
package nexus.io.tio.web.hello.controller;

import org.redisson.api.RBucket;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import nexus.io.annotation.RequestPath;
import nexus.io.jfinal.aop.Aop;
import nexus.io.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 的强大功能,实现分布式数据结构和分布式锁等高级功能,有效解决分布式系统中的一致性和同步问题。

MIT Licensed