点评--day01--Jedis

4 阅读2分钟

1. Jedis 快速入门

Jedis 是 Redis 官方推荐的 Java 客户端之一,它提供了与 Redis 原生命令一一对应的 API,使用起来非常直观。使用 Jedis 主要分为以下四个标准步骤:

第一步:引入依赖

新建一个 Maven 工程,并在 pom.xml 中引入 Jedis 和单元测试的依赖:

<!--jedis依赖-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>
<!--单元测试-->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>

第二步:建立连接

新建一个单元测试类,利用 @BeforeEach 注解在测试方法执行前初始化连接、设置密码并选择目标数据库:

private Jedis jedis;

@BeforeEach
void setUp() {
    // 1.建立连接(指定虚拟机IP和Redis端口)
    jedis = new Jedis("192.168.150.101", 6379);
    // 2.设置密码
    jedis.auth("123321");
    // 3.选择库(默认有16个库,这里选择0号库)
    jedis.select(0);
}

第三步:测试基本命令

调用 Jedis 对象的方法来操作 Redis。方法名与 Redis 的命令行指令完全一致:

@Test
void testString() {
    // 存入 String 数据
    String result = jedis.set("name", "虎哥");
    System.out.println("result = " + result);

    // 获取 String 数据
    String name = jedis.get("name");
    System.out.println("name = " + name);
}

@Test
void testHash() {
    // 插入 Hash 数据
    jedis.hset("user:1", "name", "Jack");
    jedis.hset("user:1", "age", "21");
}

第四步:释放资源

测试执行完毕后,需要使用 @AfterEach 注解修饰的方法来释放连接资源:

@AfterEach
void tearDown() {
    if (jedis != null) {
        jedis.close();
    }
}

2. 核心进阶:使用 Jedis 连接池

为什么要使用连接池? Jedis 本身是线程不安全的,并且在多线程环境下频繁地创建和销毁连接会带来极大的性能损耗。因此,强烈推荐使用 Jedis 连接池(JedisPool) 来代替直连方式,这也是典型的“池化思想”应用(类似于数据库连接池和线程池)。

2.1 创建连接池工厂类

我们可以通过工厂设计模式和静态代码块,在类加载时完成连接池的初始化,以降低代码的耦合度:

public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
        // 1. 配置连接池属性
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8); // 最大连接数
        poolConfig.setMaxIdle(8);  // 最大空闲连接数
        poolConfig.setMinIdle(0);  // 最小空闲连接数
        poolConfig.setMaxWaitMillis(1000); // 获取连接的最大等待时间

        // 2. 创建连接池对象
        jedisPool = new JedisPool(poolConfig, "192.168.150.101", 6379, 1000, "123321");
    }

    // 3. 提供获取 Jedis 连接的方法
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

2.2 改造原始代码

引入连接池后,我们在入门代码中获取连接和关闭连接的方式需要做微小改动:

  • 获取连接: 注释掉直接 new Jedis(...) 的代码,改为通过工厂获取:jedis = JedisConnectionFactory.getJedis();
  • 关闭连接的机制变化: 代码依然是调用 jedis.close(),但此时它的底层逻辑变了。它并不会真正关闭和销毁连接,而是将该 Jedis 对象归还给连接池,供后续请求复用。