使用 Java 客戶端操作 Redis

一、Jedis

創建一個 Maven 項目,添加 Jedis 依賴:

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

先看一個簡單版本的使用:

// 1、創建Jedis連接,指定redis的host以及port
Jedis jedis = new Jedis("localhost", 6379);
// 2、密碼認證
jedis.auth("shehuan");
// 4、使用 Jedis 對象中的 API 方法 操作 Redis
// 5、關閉連接,釋放資源
jedis.close();

連接成功後就可以使用 Jedis 對象來操作 Redis 了,Jedis 中的 API 方法和 Redis 的原生命令基本一致,使用起來很容易上手。

在實際的應用中,我們一般不會直接創建 Jedis 來連接 Redis,而是通過連接池來獲取連接:

// 1、創建Jedis連接池
JedisPool jedisPool = new JedisPool("localhost", 6379);
// 2、從連接池獲取jedis連接
Jedis jedis = jedisPool.getResource();
// 3、密碼認證
jedis.auth("shehuan");
try {
    // 4、使用 Jedis 對象中的 API 方法 操作 Redis
} catch (Exception e) {
    e.printStackTrace();
} finally {
    // 5、關閉連接,釋放資源
    if (jedis != null) {
        jedis.close();
    }
}

二、Lettuce

創建一個 Maven 項目,添加 Lettuce 依賴:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.0.2.RELEASE</version>
</dependency>

如下是 Lettuce 簡單的使用:

// 1、配置 Redis 服務器連接信息,uri格式,redis://密碼@ip:端口
RedisClient redisClient = RedisClient.create("redis://shehuan@localhost:6379");
// 2、創建一個連接
StatefulRedisConnection<String, String> connect = redisClient.connect();
// 3、獲取執行 Redis 指令的對象
RedisCommands<String, String> syncCommands = connect.sync();
// 4、使用 syncCommands 執行具體的 Redis 操作

connect.sync()獲取的是 Redis 指令的同步操作的對象,還可以使用connect.async()獲取指令的異步操作的對象。

三、小結

從 SpringBoot2.x 開始,默認使用 Lettuce 作爲 Spring Data Redis 的內部實現,而不是 Jedis 。下邊對兩者做一個簡單比較:

  • 默認情況下 Jedis 是直接連接 Redis 的,多個線程間共享一個連接實例,但不是線程安全的,我們在 Jedis 部分的第一個例子就是這種情況。如果在多線程場景下就需要使用連接池來實現,也就是 Jedis 部分的第二個例子。
  • Lettuce 底層是基於 Netty 框架實現的,可以實現多個線程共享一個連接實例,同時保證了線程安全,而不用線程池,性能會好一些,同時Lettuce 支持同步、異步、響應式操作 Redis。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章