热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis客户端配置优化建议

Redis客户端配置优化建议Redis客户端配置项参考spring-bootdocs:data-properties.本篇以lettuce为例.着重讲连接池的配置.配置项默认值描述
Redis客户端配置优化建议

Redis客户端配置项

参考spring-boot docs:data-properties.本篇以lettuce为例.着重讲连接池的配置.

配置项默认值描述中文描述
spring.redis.lettuce.cluster.refresh.adaptivefalseWhether adaptive topology refreshing using all available refresh triggers should be used.redis集群拓扑自动刷新
spring.redis.lettuce.cluster.refresh.periodCluster topology refresh period.集群拓扑刷新周期。
spring.redis.lettuce.pool.max-active8.0Maximum number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.连接池可以分配的最大连接数。使用负值表示无限制。
spring.redis.lettuce.pool.max-idle8.0Maximum number of “idle” connections in the pool. Use a negative value to indicate an unlimited number of idle connections.连接池可以分配的最大连接数。使用负值表示无限制。
spring.redis.lettuce.pool.max-wait-1msMaximum amount of time a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.连接池资源耗尽时,连接尝试分配阻塞时间,超时即抛出异常。使用负值无限期阻塞。
spring.redis.lettuce.pool.min-idle0.0Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if both it and time between eviction runs are positive.连接池最小空闲连接数.仅在它和time-between-eviction-runs都为正时有效
spring.redis.lettuce.pool.time-between-eviction-runsTime between runs of the idle object evictor thread. When positive, the idle object evictor thread starts, otherwise no idle object eviction is performed.空闲对象逐出器线程的运行间隔时间。当为正值时,空闲对象逐出器线程启动,否则不执行空闲对象逐出。
spring.redis.lettuce.shutdown-timeout100msShutdown timeout.关闭超时

配置详解

spring.redis.lettuce.pool.max-active

连接池最大的连接数.过少会导致竞争\阻塞.过多会浪费资源.

  • 配置数量过少

    往往在开发环境时配置会比较低,在压测时会导致竞争激烈,多数线程被阻塞,导致TPS上不去.

    可以通过打印redis查询接口耗时发现,接口耗时不稳定.有些快的在1ms完成,慢的在40ms以上,甚至超时.[建议查询耗时在1-3ms之间]

    解决方法: 加大配置值.

    建议默认值: CPU*2

一次redis连接池连接数配置过少引起的性能问题

  • 配置数量过大

    配置数量过大不仅浪费资源,甚至可能抢占不到与redis的连接,这与redis服务器可连接的最大数有关.

处理redis连接数过多

spring.redis.lettuce.pool.max-idle

连接池最大的空闲数.过少会导致频繁释放\建立链接,十分耗时(建立连接是耗时操作).过多会浪费资源.

  • 配置数量过少

    导致并发高时,需要新建与redis的连接.

    通过监控查看redis每秒新建连接数与当前连接数,逐步提高配置数量,以致达到预期.

一次redis调优——连接池优化

spring.redis.lettuce.pool.max-wait

连接尝试分配阻塞时间.过短会频繁抛出异常,在有旁路设计的系统中,压力就会宣泄到数据库中.过长或者无限制会导致接口响应时间过长.

spring.redis.lettuce.pool.min-idle

连接池最小空闲连接数.

spring.redis.lettuce.pool.time-between-eviction-runs

空闲对象逐出器线程的运行间隔时间.空闲连接线程释放周期时间.

配置推荐

开发环境

spring.redis.lettuce.pool.max-active = 2
spring.redis.lettuce.pool.max-idle = 2

生产环境

spring.redis.lettuce.pool.max-active = 大于cpu*2
spring.redis.lettuce.pool.max-idle = cpu*2
spring.redis.lettuce.pool.max-wait = 5s
spring.redis.lettuce.pool.min-idle = 0
spring.redis.lettuce.pool.time-between-eviction-runs = 1s

其他

lettuce连接池源码解析:lettuce连接池很香,撸撸它的源代码


推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • spring(22)JdbcTemplate
    2019独角兽企业重金招聘Python工程师标准###1.导入jar包,必须jar包:c3p0、mysql-connector、beans、con ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • Spring Boot使用AJAX从数据库读取数据异步刷新前端表格
      近期项目需要是实现一个通过筛选选取所需数据刷新表格的功能,因为表格只占页面的一小部分,不希望整个也页面都随之刷新,所以首先想到了使用AJAX来实现。  以下介绍解决方法(请忽视 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
  • mysql触发器怎么写
    数据库|mysql教程mysql数据库-mysql教程触发器是与MySQL数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在 ... [详细]
author-avatar
椰子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有