阅读完需:约 2 分钟
Lettuce 和 Jedis 的一个比较:
- Jedis 在实现的过程中是直接连接 Redis 的,在多个线程之间共享一个 Jedis 实例,这是线城不安 全的,如果想在多线程场景下使用 Jedis,就得使用连接池,这样,每个线城都有自己的 Jedis 实 例。
- Lettuce 基于目前很火的 Netty NIO 框架来构建,所以克服了 Jedis 中线程不安全的问题,Lettuce 支持同步、异步 以及 响应式调用,多个线程可以共享一个连接实例。
使用 Lettuce,首先创建一个普通的 Maven 项目,添加 Lettuce 依赖:
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
简单的测试连接:
public class LettuceTest {
public static void main(String[] args) {
RedisClient redisClient=RedisClient.create("redis://@127.0.0.1");
StatefulRedisConnection<String,String> connect =redisClient.connect();
RedisCommands<String,String> sync=connect.sync();
sync.set("name","123");
String name=sync.get("name");
System.out.println(name);
}
}
其中Redis的密码可以写在redis://@127.0.0.1
中,比如: redis://123a@127.0.0.1
填上 Redis 地址,连接、执行、关闭
import io.lettuce.core.*;
// Syntax: redis://[password@]host[:port][/databaseNumber]
// Syntax: redis://[username:password@]host[:port][/databaseNumber]
RedisClient redisClient = RedisClient.create("redis://password@localhost:6379/0");
StatefulRedisConnection<String, String> connection = redisClient.connect();
RedisCommands<String, String> syncCommands = connection.sync();
syncCommands.set("key", "Hello, Redis!");
connection.close();
redisClient.shutdown();
支持集群模式吗?支持!
Lettuce 连接 Redis 集群对上述客户端代码一行换一下即可:
// Syntax: redis://[password@]host[:port]
// Syntax: redis://[username:password@]host[:port]
RedisClusterClient redisClient = RedisClusterClient.create("redis://password@localhost:7379");
支持高可靠吗?支持!
Redis Sentinel 是官方提供的高可靠方案,通过 Sentinel 可以在实例故障时自动切换到从节点继续提供服务,官方文档可参考 Redis Sentinel Documentation。
仍然是替换客户端的创建方式就可以了:
// Syntax: redis-sentinel://[password@]host[:port][,host2[:port2]][/databaseNumber]#sentinelMasterId
RedisClient redisClient = RedisClient.create("redis-sentinel://localhost:26379,localhost:26380/0#mymaster");
更多详细(懒):