redis 设置连接数配置修改 java 最大连接数_Spring Boot集成mysql与Redis

6670207ba3ac4ba8d2c3454ecb211891.png

上一篇文章:一分钟解决临时需求,设计一个可热部署的切面

在项目搭建初期,我们便集成了mysql数据库,但是在现代的分布式架构中,往往还需要一种更高访问性能的键值数据库Redis。mysql结合redis解决了大多数软件系统的痛点,当然还有一些特殊的系统,需要保存大量的归档资料而用到分布式文件系统(比如GFS),需要同时满足数据强一致与高性能而自研了分布式数据库(比如OceanBase)。

本篇文章介绍我自己在Spring boot项目中,集成mysql与redis的过程,一些有关连接池的概念,遇到的一些坑,以及自己的想法。

tomcat连接池

tomcat提供了HTTP协议的web服务,如果tomcat的请求响应出现延迟,则必然会造成接口阻塞。创建连接是很消耗资源的,连接池能够很好地解决创建连接的问题,当请求结束时,不是真的物理上的关闭连接,而是将连接缓存起来,等待新的请求从而复用旧的连接。连接池这样的方式是对资源的一种抽象,客户端只要关心如何使用一个连接,而非如何获取一个连接,连接池返回的连接究竟是单例还是原型,取决于具体的实现。

tomcat连接池可选择的配置如下,每个配置条目将会覆盖tomcat对应的默认配置项:

server.tomcat.max-threads=211
server.tomcat.max-connections=10000
server.tomcat.accept-count=1000

max-threads 最大线程数。每一次HTTP请求到达Web服务,tomcat都会指派一个线程来处理该请求。最大线程数决定了Web服务容器可以同时处理多少个请求。maxThreads默认200。最大支持线程数受限于操作系统/CPU,过多的线程会导致系统频繁的上下文切换,会带来过多的内存消耗(JVM中默认情况下在创建新线程时会分配大小为1M的线程栈)。

max-connections 最大连接数。这个参数是指在同一时间,tomcat能够接受的最大连接数。对于旧版本Java的阻塞式IO,默认值等于最大线程数。对于Java 新的NIO模式,max-connections默认值是10000。如果设置为-1,则禁用max-connections功能,表示不限制tomcat容器的连接数。

accept-count 最大等待数。当所有的请求处理线程都在使用时,新的请求进入等待队列,当队列超过最大等待数时,任何的连接请求都将被拒绝。accept-count的默认值为100。max-connections和accept-count的关系为:当连接数达到最大值后,tomcat会继续接收连接,但不会超过accept-count的值。

tomcat的NIO模式“读取socket并交给Worker中的线程”这个过程是非阻塞的,当socket在等待下一个请求或等待释放时,并不会占用工作线程,因此Tomcat可以同时处理的socket数目远大于最大线程数,并发性能大大提高。

注意,测试并发效果时,测试工具不要选择浏览器,因为浏览器可能会做一些多余的动作影响测试结果,比如谷歌浏览器会对相同的请求参数队列化。

mysql与连接池

pom.xml添加mysql依赖之后,并在application.properties中配置了数据库源,在代码中就可以如下方式连接db

@Autowired
private JdbcTemplate db;

/**
 * 插入讲话
 * @param talkContent 讲话内容
 */
public boolean insertTalk(TalkContent talkContent){
    
   return db.update("insert into talk_content(user_id,user_name,talk_content,talk_time) " +
           "values(?, ?, ?, now())",
           talkContent.getUserid(),
           talkContent.getUsername(),
           talkContent.getContent()
   ) > 0;
}

Spring boot2.x默认使用HikariCP作为数据库连接池,在未配置的情况下,连接池以无感知的方式使用缺省参数初始化,可以在application.properties中显式配置:

# hikari
spring.datasource.type=com.zaxxer.h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值