Redisson

17.1.Redisson 简介

17.1.1.什么是 Redisson

Redisson 是一个提供了多种分布式和可扩展 Java 数据结构的 Redis 客户端。

Redisson 库的用途
  • 分布式实现:Redisson 提供了标准 Java 集合接口的分布式和可扩展实现,如 MapSetListQueueDeque 等。
  • 附加功能:除了数据结构,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.tio.http.server.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 来实现复杂的分布式功能,如分布式锁、集合、映射等。