redis 客户端 -- Jedis

1. Jedis 直连

本质是 TCP 连接。

执行流程

  1. 创建Jedis对象
  2. 通过Jedis执行命令
  3. 返回Jedis执行结果
  4. 关闭Jedis连接

demo

要使用 Jedis,首先我们需要安装 maven 依赖。

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

创建一个简单的 Jedis 直连的小例子:

import redis.clients.jedis.Jedis;

public class TestJedis {
public static void main(String[] args) {
// 1.生成一个 Jedis 对象,这个对象负责和指定 Redis 节点进行通信
Jedis jedis = new Jedis("localhost", 6381);
// 2. jedis 执行 set 操作
jedis.set("hello", "world");
// 3. jedis 执行 get 操作,value=“world”
String value = jedis.get("hello");
System.out.println(value); }
}

输出结果如下:

创建 Jedis 的方式

/**
* @param host Redis节点所在机器的IP或域名
* @param port Redis服务的端口号
* @param connectionTimeout 客户端连接超时时间(毫秒)
* @param soTimeout 客户端读写超时时间(毫秒)
*/
public Jedis(String host , int port , int connectionTimeout , int soTimeout)

更多操作可以参考菜鸟教程 Jedis 教程


2. Jedis 连接池

执行流程

  1. 创建一个JedisPool对象
  2. 从资源池中获取一个Jedis对象
  3. 通过Jedis执行命令
  4. 返回Jedis执行结果
  5. 关闭Jedis连接,将Jedis还给资源池

创建 Jedis 连接池的方式

JedisPoolConfig config = new JedisPoolConfig();
JedisPool jedisPool = new JedisPool(config , "127.0.0.1" , 6379);
Jedis jedis = jedisPool.getResource();
jedis.close();

demo

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; public class TestJedis {
public static void main(String[] args) {
//初始化 Jedis 连接池,通常来说 jedisPool 是单例的。
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6381);
Jedis jedis = null;
try {
// 1. 从连接池获取 Jedis 对象
jedis = jedisPool.getResource();
// 2. 执行操作
jedis.set("hello", "world");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
// 如果使用 JedisPool,close 操作不是关闭连接,代表归还连接池
jedis.close();
}
} }
}

3. Jedis 直连 VS Jedis 连接池

优点 缺点
Jedis直连 使用简单
适用于少量长期连接的场景
存在每次新建/关闭TCP连接的开销
资源无法控制,存在连接泄露的风险
Jedis对象线程不安全
Jedis连接池 Jedis对象预先生成,降低使用开销
连接池的形式保护和控制资源的使用
相对于直连,使用相对麻烦
尤其在资源的管理上需要许多参数保证
一旦参数不合理会出现很多问题

最新文章

  1. vi编辑器使用
  2. win7 ins 30131 oracle 12c
  3. Mac删除.DS_Store文件
  4. iOS 适配https
  5. 64位CentOS源码编译方式安装wine
  6. IT项目经理成长手记
  7. day20 FORM补充(随时更新),F/Q操作,model之多对多,django中间件,缓存,信号
  8. matlab灰度变彩色+白平衡算法实现
  9. IIS Express 一个网站配置多个 域名
  10. [hackerrank]John and GCD list
  11. Integer.valueOf与Integer.parseInt的小疑惑
  12. 《Android View 的事件分发和滑动冲突》 —预习资料
  13. CentOS6.5下docker的安装及遇到的问题和简单使用
  14. hdu 4634 Swipe Bo bfs+状态压缩
  15. fgets()函数以及fputs()函数
  16. Struts(十二):异常处理:exception-mapping元素
  17. jquery easyui datagrid数据自动换行 panel用法
  18. Livereload or meta
  19. 关于微信小程序textarea层级过高问题解决
  20. 自动化运维经验谈,以及为什么Docker是革命性的

热门文章

  1. JVM-GC算法(一)-标记清除算法
  2. SpringBoot的文件上传&amp;下载
  3. JS基础_使用工厂方法创建对象
  4. smarty 模板中输出时间戳为年月日格式
  5. HearthBuddy的狂野和休闲模式来回切换
  6. 静态化-VeloCity
  7. oracle中删除某个用户下的所有表
  8. leetcode探索中级算法
  9. [SQL]学习中遇到的错误
  10. Java界面程序实现图片的放大缩小