hutool RedisDS

添加依赖,tio-boot 已经内置了 hutool-all 以来,包含 hutool-redis,主要添加 jedis 依赖即可

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.6.3</version>
</dependency>

配置类

package com.imaginix.kimi.service.monitoring.config;

import com.jfinal.kit.StrKit;
import com.litongjava.jfinal.aop.annotation.ABean;
import com.litongjava.jfinal.aop.annotation.AConfiguration;
import com.litongjava.tio.utils.environment.EnvUtils;

import cn.hutool.db.nosql.redis.RedisDS;
import cn.hutool.setting.Setting;
import redis.clients.jedis.Protocol;

@AConfiguration
public class HutoolRedisConfig {
  @ABean(destroyMethod = "close")
  public RedisDS redisDS() {
    String redisHost = EnvUtils.get("redis.host", "127.0.0.1");
    String redisPort = EnvUtils.get("redis.port", "6379");
    String redisPassword = EnvUtils.get("redis.password");

    // 配置你的Redis连接信息
    Setting setting = new Setting();

    String group = "redis";
    // 地址
    setting.setByGroup("host", group, redisHost);
    // 端口
    setting.setByGroup("port", group, redisPort);
    // 密码
    if (!StrKit.isBlank(redisPassword)) {
      setting.setByGroup("password", group, redisPassword);
    }

    // 连接超时
    setting.setByGroup("timeout", group, String.valueOf(Protocol.DEFAULT_TIMEOUT));
    setting.setByGroup("connectionTimeout", group, String.valueOf(Protocol.DEFAULT_TIMEOUT));
    // 读取数据超时
    setting.setByGroup("timeout", group, String.valueOf(Protocol.DEFAULT_TIMEOUT));
    setting.setByGroup("soTimeout", group, String.valueOf(Protocol.DEFAULT_TIMEOUT));
    // 数据库序号
    setting.setByGroup("database", group, String.valueOf(Protocol.DEFAULT_DATABASE));
    // 客户端名
    setting.setByGroup("clientName", group, "Hutool");
    // 是否使用SSL
    setting.setByGroup("ssl", group, String.valueOf(false));
    RedisDS redisDS = new RedisDS(setting, group);
    // 连接redis
    redisDS.getJedis();
    return redisDS;
  }
}

测试 Controller

package com.litongjava.tio.boot.hello.AController;

import cn.hutool.db.nosql.redis.RedisDS;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.server.annotation.RequestPath;
import lombok.extern.slf4j.Slf4j;
@AController
@RequestPath("/huredis")
@Slf4j
public class HuRedisTestController {

  @RequestPath("/test")
  public String test(HttpRequest request) {
    RedisDS redisDS = Aop.get(RedisDS.class);
    String value = redisDS.getStr("key");
    if (value == null) {
      log.info("计算新的value");
      redisDS.setStr("key", "value");
    }
    return value;
  }
}

这两段代码分别是配置类和控制器类的示例,用于在 Java 项目中使用 Hutool 的 RedisDS 类来配置和访问 Redis 数据库。

配置类 (HutoolRedisConfig)

1 类和方法注解:

  • @AConfiguration: 表示这是一个配置类,用于定义和配置 Beans。
  • @ABean(destroyMethod = "close"): 创建一个 Bean,并指定当 Bean 不再需要时应该调用的销毁方法,这里是 close()
  1. 方法 redisDS():
  • Enviorment 实例(由 Aop.get(Enviorment.class) 获取)中读取 Redis 的配置信息(主机、端口、密码等)。
  • 使用 Hutool 的 Setting 类来设置 Redis 的各种配置参数,如主机、端口、密码、超时、数据库索引等。
  • 创建 RedisDS 实例,传入配置的 Setting 对象和配置组名。
  • 通过 redisDS.getJedis() 连接到 Redis 数据库。
  • 返回 RedisDS 实例。

控制器类 (HuRedisTestController)

  1. 类和方法注解:
  • @RequestPath("/huredis"): 定义控制器的基本路径。
  • @Slf4j: Lombok 注解,为类提供一个日志实例。
  1. 方法 test(HttpRequest request):
  • 通过 Aop.get(RedisDS.class) 获取 RedisDS 实例。
  • 使用 redisDS.getStr("key") 尝试从 Redis 获取与 "key" 关联的值。
  • 如果值不存在(null),则记录信息并使用 redisDS.setStr("key", "value") 设置新的键值对。
  • 返回从 Redis 获取的值(如果之前不存在,则为 null)。

这段代码展示了如何使用 Hutool 提供的 RedisDS 类在 tio-boot 框架中配置和访问 Redis 数据库。配置类 HutoolRedisConfig 负责设置 Redis 连接,而控制器类 HuRedisTestController 则处理具体的 Redis 交互逻辑。