Jedis / Lettuce
) 操作 Redis 。
Redis 默认是不支持远程连接的,需要手动开启,修改 redis.conf
,主要有 3 个地方改动:
vi /usr/local/redis-5.0.8/redis.conf
# bind 127.0.0.1
protected-mode no
requirepass 123456
之后重新启动 Redis 。
Jedis 的 GitHub 地址:https://github.com/xetorthio/jedis 。
首先创建一个普通的 Maven 项目 redis-jedis
,项目创建成功后,添加 Jedis
依赖:
<dependencies>
<dependency>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
<version>3.2.0version>
<type>jartype>
<scope>compilescope>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
然后创建一个测试类及测试方法:
public class JedisTests {
@Test
public void testJedis() {
// 1.构造一个 Jedis 对象,因为这里使用的默认端口 6379,所以不用配置端口
Jedis jedis = new Jedis("192.168.71.62");
// 2.密码认证
jedis.auth("123456");
// 3.测试是否连接成功
String r = jedis.ping();
// 4.返回 pong 表示连接成功
System.out.println(r);
jedis.set("k1", "hellojedis");
String v = jedis.get("k1");
System.out.println(v);
}
}
在 Jedis 中,方法的 API 和 Redis 的命令高度一致,所以,Jedis 中的方法见名知意,直接使用即可。
因为 Jedis 对象不是线程安全的,所以在实际应用中,我们一般都是通过连接池来获取,使用完成之后,再还给连接池。
@Test
public void testJedisPool() {
Jedis jedis = null;
// 1.构造一个 Jedis 连接池
JedisPool pool = new JedisPool("192.168.71.62", 6379);
// 2.从连接池中获取一个 Jedis 连接
jedis = pool.getResource();
jedis.auth("123456");
try {
// 3.Jedis 操作
String r = jedis.ping();
System.out.println(r);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 4.归还连接
if (jedis != null) {
jedis.close();
}
}
}
上述代码中,我们使用了 try-catch-finally
来确保 jedis 对象被关闭,也可以使用 JDK1.7 中的 try-with-resource
来实现(代码看着比之前简洁),改造如下:
@Test
public void testJedisPool2() {
JedisPool pool = new JedisPool("192.168.71.62");
try (Jedis jedis = pool.getResource()) {
jedis.auth("123456");
String ping = jedis.ping();
System.out.println(ping);
}
}
JedisPool 也可以使用 GenericObjectPoolConfig
来初始化,支持更丰富的配置,如下:
@Test
public void testJedisPool3() {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
// 连接池最大空闲数
config.setMaxIdle(300);
// 最大连接数
config.setMaxTotal(1000);
// 连接最大等待时间,如果是 -1 表示没有限制
config.setMaxWaitMillis(30000);
// 在空闲时检查有效性
config.setTestOnBorrow(true);
JedisPool pool = new JedisPool(config, "192.168.71.62", 6379, Protocol.DEFAULT_TIMEOUT, "123456");
try (Jedis jedis = pool.getResource()) {
String r = jedis.ping();
System.out.println(r);
}
}
Lettuce 的 GitHub 地址:https://github.com/lettuce-io/lettuce-core 。
Lettuce 和 Jedis 的比较:
首先创建一个普通的 Maven 项目 redis-lettuce
,项目创建成功后,添加 Lettuce
依赖:
<dependencies>
<dependency>
<groupId>io.lettucegroupId>
<artifactId>lettuce-coreartifactId>
<version>5.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
然后创建一个测试类及测试方法:
public class LettuceTests {
@Test
public void testLettuce() {
RedisClient redisClient = RedisClient.create("redis://[email protected]");
StatefulRedisConnection<String, String> connect = redisClient.connect();
RedisCommands<String, String> sync = connect.sync();
sync.set("k1", "hellolettuce");
String v = sync.get("k1");
System.out.println(v);
}
}
扫码关注微信公众号 程序员35 ,获取最新技术干货,畅聊 #程序员的35,35的程序员# 。独立站点:https://cxy35.com