这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战
前言
类似与
MySQL的连接JDBC一样,Redis也有自己的连接客户端工具Jedis。
Jedis
Jedis是Java开发的用来与Redis进行数据交互的客户端工具包。Jedis只是对Redis命令进行封装,可以轻松上手Jedis遵循RESP协议规范开发,具有良好的通用性与可读性
使用
引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
测试用例
@Test
public void testJedis() {
// 创建连接
Jedis jedis = new Jedis("81.68.234.218", 6379, 1000);
try {
// 设置登录密码
jedis.auth("123456");
// 选择数据库
jedis.select(1);
// 设置值
jedis.set("hello", "world");
String hello = jedis.get("hello");
System.out.println(hello);
} catch (Exception e) {
throw e;
} finally {
jedis.close();
}
}
使用之前安装的可视化工具验证结果AnotherRedisDesktopManager安装
正如示例所示,连接使用非常简单,并且方法名就是用客户端的指令来命名的,学习起来也没有什么障碍。我们只需要将精力放在业务上。
JedisPool
- 从连接池借
Jedis对象Jedis执行命令- 返回执行结果
- 归还
Jedis对象给连接池
测试用例
@Test
public void testJedisPool() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(100);// 设置连接池中最多允许存放100个jedis连接对象
jedisPoolConfig.setMaxIdle(100);//设置允许最大空闲连接
jedisPoolConfig.setMinIdle(10);//设置允许最小空闲连接
jedisPoolConfig.setTestOnBorrow(false);//借出时校验是否有效,推荐为false
jedisPoolConfig.setTestOnReturn(false);//归还时校验是否有效
jedisPoolConfig.setTestOnCreate(false);//创建时校验是否有效
jedisPoolConfig.setBlockWhenExhausted(true);//连接池无可用jedis,是否等待
jedisPoolConfig.setMaxWaitMillis(1000);//等待1s,1s后没有空闲的jedis对象就报错
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "81.68.234.218", 6379);
Jedis jedis = null;
try {
jedis = jedisPool.getResource();//借出一个
jedis.auth("123456");
jedis.set("a", "123");
String a = jedis.get("a");
System.out.println(a);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis!=null){
jedis.close();
}
}
}
注意:TestOnCreate/Borrow/Return 本地开发时建议设置成false
总结
| 优点 | 缺点 | |
|---|---|---|
| 直连 | 简单粗暴 适用于少量连接的场景 | Jedis线程不安全 存在连接泄露的可能 |
| 连接池 | Jedis对象预先生成,降低运行时开销 便于对连接资源进行监管于控制 | 实用麻烦 参数较多,规划不合理,容易出问题 |