Redis-client-Jedis

Jedis是java语言实现的Redis客户端驱动。Data Redis的封装并不太必要,因为Jedis已足够简单,没有像Spring Data MongoDB对MongoDB java driver的封装那样大幅简化代码,顶多就是加强了一点点点pipeline和transaction状态下的coding,禁止了一些此状态下不能用的命令。而所谓屏蔽各种底层driver的差异并不太吸引人。

client端连接池实现
  1. Jedis基于Apache Commons Pool做的连接池,默认MaxActive最大连接数只有8,必须重新设置。而且MaxIdle也要相应增大,否则所有新建的连接用完即弃,然后会不停的重新连接。

  2. 另外Jedis设定了每30秒对所有连接执行一次ping,以发现失效的连接,这样每30秒会有一个拿不到连接的高峰。但效果如何需要独立分析。比如系统高峰之后可能有一长段时间很闲,而且Redis Server那边做了Timeout控制会把连接断掉,这时候做idle checking是有意义的,但30秒一次也太过频繁了。否则关掉它更好。

  3. Redis默认最大连接数是10000(一万);Redis默认不对Client做Timeout处理,可以用timeout 项配置,但即使配了也不会非常精确。

JedisPool使用示例

Jedis实例是非线程安全的,当需要创建多个Jedis实例时要使用JedisPool类,当使用完Jedis对象时要放回JedisPool。

关闭连接

Jedis的blocking pop函数,应用执行ExecutorService.shutdownNow()中断线程时并不能把它中断。

两个解决方法:

  1. 不要用不限时的blocking popup,传多一个超时时间参数,如5秒。
  2. 找地方将调用blocking popup的Jedis保存起来,shutdown时主动调用它的close。

参考链接
Jedis-wiki

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,120评论 1 51
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,371评论 0 36
  • 节选自《redis开发与运维》 先来看一段client list的执行结果 输出结果的每一行代表一个客户端的信息,...
    一帅阅读 11,982评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 有这样一个故事,一个渔夫悠闲地躺在沙滩上晒太阳,这时,一个到海边度假的富翁走过来,问他:“你这么早就收网休息了?”...
    墨笔生徽阅读 736评论 0 0