一、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。