一、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。
网友评论