redis连接池参数

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 如果系统启动完马上就会有很多的请求过来,那么可以给redis连接池做预热,比如快速的创建一些redis连接,执行简单命令,类似ping(),快速的将连接池里的空闲连接提升到minldle的数量。

redis连接池

redis连接池的懒加载

redis初始化的时候,不会自动初始化连接,只有用到的时候,才会初始化。


连接池参数


image.png


优化建议:


1). maxTotal: 最大连接数,早期版本叫maxActive


实际上这个是一个很难回答的问题,考虑的因素比较多:


业务希望Redis并发量


客户端执行命令时间


Redis资源:例如 nodes(例如应用个数) * maxTotal 是不能超过redis的最大连接数maxClients。


资源开销:例如虽然希望控制空闲连接(连接池此刻可马上使用的连接),但是不希望因为连接池的频繁释放创建连接造成不必要开销。


以例子说明:假设


1. 一次命令时间(borrow| return resource + jedis 执行命令(含网络)) 的平均耗时约为1ms,一个连接的qps 大约是1000 (1000ms / 1ms)


业务期望的qps是50000


QPS的计算公式为:QPS = 总请求数 / 总时间(秒)。


那么理论上需要的资源池大小是50000/1000=50个。但事实上这是个理论值,还要考虑到要比理论值预留一些资源,通常来讲maxTotal可以比理论值大一些。


但这个值不是越大越好,一方面连接太多占用客户端和服务端资源,另一方面对于Redis这种高QPS的服务器,一个大命令的阻塞即使设置再大资源池仍然会无济于事。


2). maxIdle和minIdle


maxldle实际上才是业务需要的最大连接数,maxTotal是为了给出余量,所以maxldle不要设置过小,否则会有new Jedis(新连接)开销。


连接池的最佳性能是maxTotal=maxldle,这样就避免连接池伸缩带来的性能干扰。但是如果并发量不大或者maxTotal设置过高,会导致不必要的连接资源浪费。一般推荐maxldle可以设置为按上面的业务期望QPS计算出来的理论连接数,maxTotal可以再放大一倍。

minldle(最小空闲连接数),与其说是最小空闲连接数,不如说是"至少需要保持的空闲连接数",在使用连接的过程中,如果连接数超过了minldle,那么继续建立连接,如果超过了maxldle,当超过的连接执行完业务后会慢慢被移出连接池释放掉。


如果系统启动完马上就会有很多的请求过来,那么可以给redis连接池做预热,比如快速的创建一些redis连接,执行简单命令,类似ping(),快速的将连接池里的空闲连接提升到minldle的数量。


redis连接池的预热代码


List<Jedis> minIdleJedisList = new ArrayList<Jedis>(jedisPoolConfig.getMinIdle())
    
for(int i = 0 ;i< jedisPoolCOnfig.getMinIdle(); i++){
    Jedis jedis = null;
    try{
        jedis = jedisPool.getResource();
        minIdleJedisList.add(jedis);
        jedis.ping();
    }catch(Exception e){
        
    }finally{
        //注意,这里不能马上close将连接还回连接池,否则最后连接池里只会建立一个连接
        //jedis.close()
    }
} 

//统一将预热的连接返还给连接池
for(int i = 0 ;i< jedisPoolCOnfig.getMinIdle(); i++){
    Jedis jedis = null;
    try{
        jedis = minIdleJedisList.get(i);
        jedis.close();
    }catch(Exception e){
        
    }
}


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
NoSQL Java 关系型数据库
mysql和redis连接池
mysql和redis连接池
55 0
|
6月前
|
NoSQL Redis
Redis进阶-bind参数详解
Redis进阶-bind参数详解
390 0
|
6月前
|
关系型数据库 MySQL Java
mysql连接池和redis连接池的实现
mysql连接池和redis连接池的实现
79 0
|
3月前
|
缓存 弹性计算 NoSQL
【Azure Redis 缓存 Azure Cache For Redis】Redis连接池
【Azure Redis 缓存 Azure Cache For Redis】Redis连接池
|
19天前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
3月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
|
6月前
|
关系型数据库 MySQL Java
mysql连接池和redis连接池
mysql连接池和redis连接池
184 0
|
3月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
|
6月前
|
NoSQL Java 数据库连接
springboot整合Redis中连接池jedis与lettuce的对比和实现
springboot整合Redis中连接池jedis与lettuce的对比和实现
907 0
|
4月前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码