Jedis的配置和优化

摘要:
举例:命令平均执行时间0.1ms=0.001s业务需要50000QPSmaxTotal理论值=0.001*50000=50个。无法从连接池中获取连接(超时)连接池中资源耗尽解决思路:1.慢查询阻塞:池子连接都被hang住。

参数名:maxTotal

含义:资源池最大连接数 【默认值:8】

使用建议:需要考虑以下几点

1.业务希望的Redis并发量

2.客户端执行命令时间

3.Redis资源:例如应用个数(客户端)* maxTotal 不能超过Redis服务端的最大连接数(config get maxclients)

4.资源开销:例如虽然希望控制空闲连接,但是不希望因为连接池的频繁释放创建连接造成不必要的开销。

举例:

命令平均执行时间0.1ms = 0.001s

业务需要50000 QPS

maxTotal理论值 = 0.001 * 50000 = 50个。实际值要偏大一些。

参数名:maxIdle

含义:资源池允许最大的空闲连接数 【默认值:8】

使用建议:建议跟maxTotal设置的值一样,这样可以减少创建新连接的开销

参数名:minIdle

含义:资源池确保最少空闲连接数 【默认值:0】

使用建议:建议第一次开启的时候预热(初始化一个值),减少第一次启动后的新连接开销

参数名:jmxEnabled

含义:是否开启jmx监控,可用于监控资源使用状态 【默认值:true】

使用建议:开启

参数名:blockWhenExhausted

含义:当资源池用尽后,调用者是否要等待。只有当为true时,配置的maxWaitMillis参数才会生效 【默认值:true】

使用建议:建议先使用默认值,但这个也要看情况,如果并发量大,可以直接设置false,即每次请求资源时,如果连接资源不够,马上new个新的

参数名:maxWaitMillis

含义:当资源池连接用尽后,调用者最大等待时间(单位为毫秒) 【默认-1,表示永不超时】

使用建议:不建议使用默认值,再高并发环境下,获取资源不能hand在一个没有超时时间的地方,具体设置根据实际场景 如设置1000即为等待1秒。

参数名:testOnBorrow、testOnReturn

含义:这两个参数是说,客户端向连接池借用或归还时,是否会在内部进行有效性检测(ping),无效的资源将被移除 【默认值:false】

使用建议:建议false,在高并发场景下,因为这样无形给每次增加了两次ping操作,对QPS有影响,如果不是高并发环境,可以考虑开启,或者自己来检测。

无法从连接池中获取连接(超时)

连接池中资源耗尽(最大连接maxTotal和最大空闲连接maxIdle设置不等)

解决思路:

1.慢查询阻塞:池子连接都被hang住。

2.资源参数不合理:例如QPS高,池子小。

3.连接泄露(没有close()):也就是没有归还连接,可以用client list、netstat观察连接的一个增长情况,最重要的是try...catch...finally

免责声明:文章转载自《Jedis的配置和优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇打包成apk,生成apk文件,上传到网站服务器提供链接下载js实现开关功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java操作Redis

Java访问redis Java操作redis string(字符串) hash(哈希) list(列表) set(集合)  zset(sorted set:有序集合) package com.cjh; import redis.clients.jedis.Jedis; /** * @author * @site * @company * @...

数据连接池DruId的使用

1,下载druID.jar包 2,配置文件druid.properties配置相关信息 driverClassName : org.gjt.mm.mysql.Driverurl : jdbc:mysql://127.0.0.1:3306/e_testusername : rootpassword : admin#初始化物理连接数目#initialSize...

[Spark]-作业调度与动态资源分配

1.概述   由 Spark 集群篇 ,每个Spark应用(其中包含了一个SparkContext实例),都会运行一些独占的执行器(executor)进程.集群调度器会提供对这些 Spark 应用的资源调度.   而在各个Spark应用内部,各个线程可能并发地通过action算子提交多个Spark作业(job).这里就是Spark的作业调度   Spark...

commons-pool2 实现 sftp 连接池

简介 ssh 默认的连接数量有限,当大量请求连接 ssh 时会概率性连接失败甚至直接失败,因此需要对连接池化,当然如果不要求实时的话可以用生产者消费者。 了解 commons-pool2 依赖 <dependency> <groupId>org.apache.commons</groupId> <a...

Java 开发 2.0: 现实世界中的 Redis

原文地址:http://www.ibm.com/developerworks/cn/java/j-javadev2-22/ 之前,我已在本系列中讨论过 NoSQL 的概念,也介绍了一些与 Java 平台兼容的 NoSQL 数据存储,其中包括 Google 的 Bigtable 和 Amazon 的 SimpleDB。此外,我还讨论过较为常见的基于服务器的...

Redis分布式锁

加锁 所以需要保证设置锁及其过期时间两个操作的原子性,spring data的 RedisTemplate 当中并没有这样的方法。但是在jedis当中是有这种原子操作的方法的,需要通过 RedisTemplate 的 execute 方法获取到jedis里操作命令的对象,代码如下: String result = redisTemplate.execut...