jedis直连

每次操作都会创建一个jedis对象,执行完毕后关闭连接后释放,对应的就是一次Tcp连接。

jedis连接池

预先生成一批jedis连接对象放入连接池中,当需要对redis进行操作时从连接池中借用jedis对象,操作完成后归还。这样jedis对象可以重复使用,避免了频繁创建socket连接,节省了连接开销。

方案对比

连接池简单使用

  1. public class Demo {
  2. public static void main(String[] args) {
  3. //连接池配置对象,包含了很多默认配置
  4. GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
  5. //初始化Jedis连接池,通常来讲JedisPool是单例的
  6. JedisPool jedisPool = new JedisPool(poolConfig, "119.23.226.29", 6379);
  7. Jedis jedis = null;
  8. try {
  9. //1.从连接池获取jedis对象
  10. jedis = jedisPool.getResource();
  11. //2.执行操作
  12. jedis.set("hello", "jedis");
  13. System.out.println(jedis.get("hello"));
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. } finally{
  17. //如果使用JedisPool,那么close操作不是关闭连接,代表归还连接池
  18. if(jedis != null){
  19. jedis.close();
  20. }
  21. }
  22. }
  23. }

连接池封装使用

  1. public class RedisPool {
  2. //jedis连接池,使用static保证连接池在tomcat启动时就加载出来
  3. private static JedisPool pool;
  4. //连接池中的最大连接数
  5. private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total", "20"));
  6. //连接池中的最大空闲连接数
  7. private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle", "20"));
  8. //连接池中的最小空闲连接数
  9. private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle", "0"));
  10. //借用连接时是否进行验证
  11. private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow", "true"));
  12. //返还连接时是否进行验证
  13. private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return", "true"));
  14. private static String redisIp = PropertiesUtil.getProperty("redis.ip");
  15. private static Integer redisPort = Integer.parseInt(PropertiesUtil.getProperty("redis.port"));
  16. private static String password = PropertiesUtil.getProperty("redis.password");
  17. //初始化连接池,只会调用一次
  18. private static void initPool() {
  19. JedisPoolConfig config = new JedisPoolConfig();
  20. config.setMaxTotal(maxTotal);
  21. config.setMaxIdle(maxIdle);
  22. config.setMinIdle(minIdle);
  23. config.setTestOnBorrow(testOnBorrow);
  24. config.setTestOnReturn(testOnReturn);
  25. //连接池耗尽的时候,是否阻塞,false会抛出异常,true会阻塞直到超时抛出异常,默认为true
  26. config.setBlockWhenExhausted(true);
  27. //超时时间2s
  28. pool = new JedisPool(config, redisIp, redisPort, 1000*2, password);
  29. }
  30. static {
  31. initPool();
  32. }
  33. //从连接池中借用一个实例
  34. public static Jedis getJedis() {
  35. return pool.getResource();
  36. }
  37. }
  1. public class RedisPoolUtil {
  2. public static String set(String key, String value) {
  3. Jedis jedis = null;
  4. String result = null;
  5. try {
  6. jedis = RedisPool.getJedis();
  7. result = jedis.set(key, value);
  8. } catch (Exception e) {
  9. log.error("set key:{} value:{} error", key, value, e);
  10. } finally {
  11. shutdown(jedis);
  12. }
  13. return result;
  14. }
  15. public static void shutdown(Jedis jedis) {
  16. if (null != jedis) {
  17. // close会判断连接是否破损而执行对应的回收操作
  18. jedis.close();
  19. }
  20. }
  21. }

Jedis 连接池的基本使用的更多相关文章

  1. Java与redis交互、Jedis连接池JedisPool

    Java与redis交互比较常用的是Jedis. 先导入jar包: commons-pool2-2.3.jar jedis-2.7.0.jar 基本使用: public class RedisTest ...

  2. Jedis连接池

    jedis是官方首选的java客户端开发包 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Ja ...

  3. 详解Jedis连接池报错处理

    在使用Jedis连接池模式下,比较常见的报错如下: redis.clients.jedis.exceptions.JedisConnectionException:Could not get a re ...

  4. 为什么要用Jedis连接池+浅谈jedis连接池使用

    为什么要使用Jedis连接池 Redis作为缓存数据库理论上和MySQL一样需要客户端和服务端建立起来连接进行相关操作,使用MySQL的时候相信大家都会使用一款开源的连接池,例如C3P0.因为直连会消 ...

  5. Jedis与Jedis连接池

    1.Jedis简介 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: https://redis.io/clients 2. ...

  6. 三、redis学习(jedis连接池)

    一.jedis连接池 二.jedis连接池+config配置文件 三.jedis连接池+config配置文件+util工具类 util类 public class JedisPoolUtils { / ...

  7. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  8. jedis连接池详解(Redis)

    转自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都 ...

  9. Jedis连接池使用

    构建redis连接池,返还到连接池 private static JedisPool jedisPool = null; private static Jedis jedis; static { je ...

随机推荐

  1. 【Linux】【Commands】文本查看类

    分屏查看命令:more和less more命令: more FILE 特点:翻屏至文件尾部后自动退出: less命令: less FILE head命令: 查看文件的前n行: head [option ...

  2. Spring Boot中使用Redis

    一.定义工程 创建一个spring boot模块 二.修改pom文件 在pom文件中添加Spring Boot与Redis整合依赖 <dependencies> <!--spring ...

  3. Socket通信和多线程的总结

    1.ServerSocket进行多线程接收 package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; ...

  4. java输入/输出流的基本知识

    通过流可以读写文件,流是一组有序列的数据序列,以先进先出方式发送信息的通道. 输入/输出流抽象类有两种:InputStream/OutputStream字节输入流和Reader/Writer字符输入流 ...

  5. 2.VUEJS-安装

    Vue.js 安装 1.独立版本 我们可以在 Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入. 2.使用 CDN 方法 以下推荐国外比较稳定的两个 ...

  6. Webpack学习篇

    <深入浅出Webpack>优化篇 01 Webpack 优化可以分为开发优化和输出质量优化两部分,主要要点如下: 优化开发体验,提升开发效率 优化构建速度 优化使用体验 优化输出质量 减少 ...

  7. Docker从入门到精通(二)——安装Docker

    通过上面文章,我们大概知道了什么是Docker,但那都是文字功夫,具体想要理解,还得实操,于是这篇文章带着大家来手动安装Docker. 1.官方教程 https://docs.docker.com/e ...

  8. Tableau如何绘制双柱折线组合图2

    一.数据源准备 二.创建计算字段月度-拖拽至列-右键-精确日期 CASE[指标] WHEN "同期"then DATETRUNC('day',[日期])-5 WHEN " ...

  9. 图数据库HugeGraph:HugeGraph-Hubble基于Web的可视化图管理初体验

    原创/朱季谦 一.HugeGraph-Hubble简介 关于HugeGraph,官方资料是这样介绍的,它是一款易用.高效.通用的开源图数据库系统(Graph Database), 实现了 Apache ...

  10. [BUUCTF]REVERSE——[SUCTF2019]SignIn

    [SUCTF2019]SignIn 附件 步骤: 无壳,64位ida载入 程序调用了 __gmpz_init_set_str 函数,这是一个 GNU 高精度算法库,在RSA加密中见过几次,加上6553 ...