2019独角兽企业重金招聘Python工程师标准>>>

现阶段,互联网越来越热,高并发的设计越来越高,大多数开发者都开始使用redis作为中间件,用以解决高并发的问题。jedis作为redis的客户端,使用也是越来越频繁。很多开发者都注意到了无论是在单机模式还是分布式模式下,jedis获得链接完成操作后,都必须主动归还(也就是做链接的关闭)动作。为什么呢?

查看jedis源码不难发现其缘由。

public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands,AdvancedJedisCommands, ScriptingCommands, BasicCommands, ClusterCommands, SentinelCommands {
........
}

Jedis继承了父类BinaryJedis,那么再来看看BinaryJedis源码:

public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands,AdvancedBinaryJedisCommands, BinaryScriptingCommands, Closeable {protected Client client = null;protected Transaction transaction = null;protected Pipeline pipeline = null;......}

查看BinaryJedis源码,不难发现,所有与redis操作都与Client类有关。我们就再来看看Client这个类吧。

public class Client extends BinaryClient implements Commands {public Client() {super();}public Client(final String host) {super(host);}
.......
}

继续查看BinaryClient类

public class BinaryClient extends Connection {public enum LIST_POSITION {BEFORE, AFTER;public final byte[] raw;private LIST_POSITION() {raw = SafeEncoder.encode(name());}}private boolean isInMulti;private String password;private long db;private boolean isInWatch;public BinaryClient() {super();}public BinaryClient(final String host) {super(host);}
..........
}

还有父类,继续查看父类Connection

public class Connection implements Closeable {private static final byte[][] EMPTY_ARGS = new byte[0][];private String host = Protocol.DEFAULT_HOST;private int port = Protocol.DEFAULT_PORT;private Socket socket;private RedisOutputStream outputStream;private RedisInputStream inputStream;private int pipelinedCommands = 0;private int connectionTimeout = Protocol.DEFAULT_TIMEOUT;private int soTimeout = Protocol.DEFAULT_TIMEOUT;private boolean broken = false;private boolean ssl;private SSLSocketFactory sslSocketFactory;private SSLParameters sslParameters;private HostnameVerifier hostnameVerifier;public Connection() {}public Connection(final String host) {this.host = host;}public Connection(final String host, final int port) {this.host = host;this.port = port;}public Connection(final String host, final int port, final boolean ssl) {this.host = host;this.port = port;this.ssl = ssl;}.........
}

吼吼,看到这里就不难发现,jedis作为redis的客户端链接服务器是通过socket来完成的。

而Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库。所以作为多线程的客户端,jedis使用后要主动做归还动作。否则。。。你明白的!占用socket资源咯

转载于:https://my.oschina.net/OHC1U9jZt/blog/1537428

为什么Jedis操作后要主动归还?相关推荐

  1. jedis操作set_Java中使用Jedis操作Redis的示例代码

    使用java操作Redis需要jedis-2.1.0.jar,下载地址:jedis-2.1.0.jar 如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:c ...

  2. java jedis使用_Java中使用Jedis操作Redis

    Java中使用Jedis操作Redis 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0 ...

  3. java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存

    概述          Jedis是redis官方推荐的用于访问Java客户端,在https://github.com/xetorthio/jedis下载最新的jedis. 访问redis 1.访问简 ...

  4. 使用jedisPool管理jedis,使用jedis操作redis

    ps:jedis是redis在java中的客户端操作工具 package com.test; 2 3 import java.util.HashMap; 4 import java.util.Iter ...

  5. Lettuce替换Jedis操作Redis缓存

    Redis介绍及Mencached对比 Redis全称是远程字典服务,是一个Key-Value的存储系统,相比于很早之前一直使用的mencached,不单单提供了更多的类型支持. 数据类型上:menc ...

  6. jedis操作set_使用 JedisAPI 操作 Redis

    一 使用 JedisAPI 操作 Redis Jedis 集成了 redis 的一些命令操作,封装了对 redis 命令的 Java 客户端. 1 使用 Jedis 操作 Redis 单机版 1.1 ...

  7. 最经典java使用Jedis操作Redis

    用Java操作Redis需要jedis-2.1.0.jar,下载地址: http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip 如果需要使用Redis ...

  8. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  9. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

最新文章

  1. mysql cert_Mysql使用SSL连接
  2. 20180829-Java多线程编程
  3. 惊艳了!升级版的 APDrawing,秒让人脸照变线条肖像画
  4. 解决msgfmt无法使用的问题
  5. 拨号、宽带接入“面面观”比较九种上网方式
  6. android aar编程,AndroidStudio脚本命令指定AAR生成目录与版本号
  7. 前端学习(2902):javascript浏览器的历史
  8. 成功网络管理员必备“软件”素质
  9. GD2拖动验证码Thinkphp版
  10. 【GNN】图网络|图神经网络(GNN)结构化数据分析
  11. STL(multiset) UVA 11020 Efficient Solutions
  12. 关于iWebOffice中使用变量插入到Office书签里面
  13. Python地学分析 — GDAL通过矢量裁剪遥感图像
  14. 菜鸟学MAC - mac十大使用技巧
  15. 10段世界最美的英语美文
  16. 什么是SEM?SEM是否包括SEO?
  17. switch()的参数类型
  18. 百趣代谢组学分享:从SWATH到MRM:一种新型高覆盖度靶向代谢组学技术
  19. Chisel bootcamp 安装 - Centos7.9
  20. Python3 网络爬虫:模拟登录淘宝,清空女朋友的购物车!

热门文章

  1. SpringBoot+AntV实现饼状图中的花瓣图
  2. Python3中提示:no module named 'wxpy'
  3. Vue实现仿音乐播放器12-实现歌手页面效果
  4. goj基础环境的配置
  5. 调用c++_WebAssembly: 在C代码中调用JS的函数
  6. 最新发布丨游戏市场“超预期”增长背景下,如何加速产品精品化 运营精细化?...
  7. velocity模板引擎 -- java.io.FileNotFoundException: velocity.log (Permission denied)
  8. 二维数组的查找,刷题成功——剑指Offer
  9. 移动设备将成为2014年最大的安全风险
  10. 关于学习的一则小故事