系列文章:

redis知识盘点【零】_redis常用命令

redis知识盘点【壹】_基础知识

redis知识盘点【贰】_五种类型

redis知识盘点【叁】_持久化

redis知识盘点【肆】_主从复制和sentinel哨兵

redis知识盘点【伍】_一致性哈希和cluster集群

redis知识盘点【陆】_客户端Jedis

redis知识盘点【柒】_redis补遗

本篇文章主要介绍一下redis的客户端Jedis。

首先明确两点:一、redis客户端与服务端之间的通信协议是在TCP协议之上构建的;二、Redis制定了RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。

在java工程中,我们一般使用Jedis作为客户端和redis服务器进行交互,而当我们配置Jedis连接池的时候,有如下参数需要关注:

GenericObjectPoolConfig配置项

客户端常见异常

1.无法从连接池获取到连接


JedisPool中的Jedis对象个数是有限的,默认是8个。这里假设使用的默认配置,如果有8个Jedis对象被占用,并且没有归还,此时调用者还要从JedisPool中借用Jedis,就需要进行等待(例如设置了maxWaitMillis>0),如果在maxWaitMillis时间内仍然无法获取到Jedis对象就会抛出如下异常:

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resourcefrom the pool
…
Caused by: java.util.NoSuchElementException: Timeout waiting for idle objectat org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)

还有一种情况,就是设置了blockWhenExhausted=false,那么调用者发现池中没有资源时,会立即抛出异常不进行等待,下面的异常就是blockWhenExhausted=false时的效果:

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
…
Caused by: java.util.NoSuchElementException: Pool exhausted at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:464)

2.客户端读写超时


Jedis在调用Redis时,如果出现了读写超时后,会出现下面的异常:

redis.clients.jedis.exceptions.JedisConnectionException:
java.net.SocketTimeoutException: Read timed out

造成该异常的原因也有以下几种:

1.读写超时间设置得过短;
2命令本身就比较慢;
3客户端与服务端网络不正常;
4·Redis自身发生阻塞;

3.客户端连接超时


Jedis在调用Redis时,如果出现了连接超时后,会出现下面的异常:

redis.clients.jedis.exceptions.JedisConnectionException:
java.net.SocketTimeoutException: connect timed out

造成该异常的原因也有以下几种:

1.连接超时设置得过短,可以通过下面代码进行设置:
2.Redis发生阻塞,造成tcp-backlog已满,造成新的连接失败;
3.客户端与服务端网络不正常;

4.客户端缓冲区异常


Jedis在调用Redis时,如果出现客户端数据流异常,会出现下面的异常:

redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.

造成这个异常的原因可能有如下几种:
1)输出缓冲区满。例如将普通客户端的输出缓冲区设置为1M 1M 60:

config set client-output-buffer-limit "normal 1048576 1048576 60 slave 268435456
67108864 60 pubsub 33554432 8388608 60"

2)长时间闲置连接被服务端主动断开,上节已经详细分析了这个问题。

3)不正常并发读写:Jedis对象同时被多个线程并发操作,可能会出现上述异常。

5.Redis正在加载持久化文件

Jedis调用Redis时,如果Redis正在加载持久化文件,那么会收到下面的异常:

redis.clients.jedis.exceptions.JedisDataException: LOADING Redis is loading the dataset in memory

6.Redis使用的内存超过maxmemory配置

Jedis执行写操作时,如果Redis的使用内存大于maxmemory的设置,会收到下面的异常,此时应该调整maxmemory并找到造成内存增长的原因:

redis.clients.jedis.exceptions.JedisDataException: OOM command not allowed when
used memory > 'maxmemory'. 

7.客户端连接数过大

如果客户端连接数超过了maxclients,新申请的连接就会出现如下异常:

redis.clients.jedis.exceptions.JedisDataException: ERR max number of clients reached

redis知识盘点【陆】_客户端Jedis相关推荐

  1. java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...

  2. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍(转)

    [-] 一普通同步方式 二事务方式Transactions 三管道Pipelining 四管道中调用事务 五分布式直连同步调用 六分布式直连异步调用 七分布式连接池同步调用 八分布式连接池异步调用 九 ...

  3. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍--转载

    原文地址:http://www.blogways.net/blog/2013/06/02/jedis-demo.html redis是一个著名的key-value存储系统,而作为其官方推荐的java版 ...

  4. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    一.普通同步方式 二.事务方式(Transactions) 三.管道(Pipelining) 四.管道中调用事务 五.分布式直连同步调用 六.分布式直连异步调用 七.分布式连接池同步调用 八.分布式连 ...

  5. redis客户端Jedis和Luttuce的区别,并使用springboot整合

    Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server.也就是说这两种都可以是redis的客户端. Jedis Jedis在实现上是直接连 ...

  6. 组件分享之后端组件——Redis数据库的一个Go客户端redigo

    组件分享之后端组件--Redis数据库的一个Go客户端redigo 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类 ...

  7. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  8. redis 读取mysql数据类型_认识Redis与Redis的数据类型

    本文作为Redis的入门教程,旨在让大家对Redis有一个概念性和整体性的认识,并且可以快速上手,为深入Redis打下基础. 文章概要: 1. Redis的介绍 2. Redis与其他数据库的对比 3 ...

  9. jedis使用_Redis --Java客户端 Jedis

    Redis --Java客户端 Jedis 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 Jedis: 一款java操作 ...

  10. Redis的三个框架:Jedis,Redisson,Lettuce

    Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html redisson 官网地址: ...

最新文章

  1. 网络模型mAP计算实现代码
  2. python列表元素交换位置_python删除列表元素5种方法,你会的是错误法还是最优解?...
  3. 推荐一个学算法的 GitHub 项目
  4. remo video repair中文版
  5. vue-cli安装笔记
  6. 用计算机做科学计算是绝对精确的吗,科学计算与数学建模 - osc_3gfjojb2的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. Index of open source
  8. .NET 6 攻略大全(四)
  9. 【C语言简单说】八:分支结构之if...else if()...else...(3)
  10. day01『NLP打卡营』实践课1:词向量应用演示
  11. python怎么把列表转换成字符串_如何将字节列表(unicode)转换为Python字符串?
  12. wireshark rto_RTO的完整形式是什么?
  13. 0x80070659系统策略禁止这个安装_教你如何将电脑C盘设置成禁止安装任何软件
  14. elt php,ELT(数据仓库技术) 学习
  15. FreeSWITCH的NAT穿越
  16. 科大讯飞2017年报:营收54亿利润5.9亿,政府补助1.18亿
  17. 职场白骨精必看的五个寓言
  18. 使用GDI来绘制简易验证码
  19. 计算机应用技术专业的周志,计算机科学与技术专业实习周记
  20. vc读取北通手柄按键_北通手柄驱动按键操作方法详解

热门文章

  1. scrapy爬虫实战:伪装headers构造假IP骗过ip138.com
  2. 如何快速提升自己的Java 技术?
  3. Mybatis使用choose when
  4. java个人博客源码ssm_基于SSM的个人博客系统源代码
  5. 高盛VR/AR报告完整解读版
  6. 华为、海尔之后,阿里在全屋智能领域有新动作,这次牵手的是萤石
  7. 平板android怎么玩电脑游戏,Android平板模拟家用主机游戏教程_小米 平板_平板电脑新闻-中关村在线...
  8. 京东数据分析工具推荐(京东第三方数据平台)
  9. 计算机专业—毕业设计题目大全
  10. 方舟服务器怎么去地牢拿芯片,方舟生存进化怎么拿芯片