mysql和redis连接池

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: mysql和redis连接池

1、为什么要使用连接池

       池化技术可以减少资源的创建次数,提高程序的响应性能,特别是在高并发下特别明显,常见的有线程池、内存池、连接池、对象池;使用池式缓存的资源对象有如下特点:

       1)对象创建时间长;

       2)对象创建需要大量资源;

       3)对象创建后可被重复使用;

2、连接池的设计原理

   

       比如登陆,发消息等被封装成任务,每个任务放到线程池的队列中,比如每个发消息任务都要和数据库创建创建连接是没有必要的;没创建一个连接都要进行三次握手,验证,用户退出,四次挥手是无效的措施; 只有执行sql是有效的;

       比如,连接池创建了4个连接,保持线程池模块连接到数据库中,如果线程池需要操作数据库做任务,那么只需要从连接池获取连接,每个连接只能同时给一个任务用。比如线程1从连接池获取一个连接操作数据库,用完以后归还连接到线程池;

       线程池:主动操作,获取并执行任务;

       连接池:被动操作,类似线程池,池对象被任务获取,执行完任务后归还;

3、mysql不使用连接池的情况下,实现简单,但是每次发起sql操作都要经历tcp建立连接,数据库验证,数据库用户退出,tcp断开连接;网络io较多,带宽利用率低,qps较低;频繁创建连接和关闭连接,导致临时对象较多·,带来更多的内存碎片,在关闭连接后会出现大量TIME_WAIT的TCP状态;

 

4、使用连接池时,第一次访问需要建立连接,但之后的访问,均会复用之前创建的连接,直接执行sql语句;缺点是设计复杂,优点是降低了网络开销,连接复用有限的减少了连接数,提高性能避免频繁创建连接,没有TIME_WAIT状态问题;

5、长连接和连接池

       长连接是一些驱动,驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,以便后续数据库操作可以重用连接,从而减少数据库连接的开销;

       连接池,是应用服务器的组件,它可以通过参数配置连接数,连接检测,连接的生命周期等;连接池内的连接就是长连接;

6、数据库连接池运行机制

       1)连接池获取或创建可用连接;

       2)使用完毕后,把连接返回给连接池;

       3)系统关闭前,断开所有连接并释放连接占用的系统资源;

 

7、线程池设计

       使用连接池需要预先建立数据库连接;设计思路:

       1)长连接数据库,涉及数据库ip,端口,用户名,密码,数据库名字等;

       2)每个连接对象都是独立的连接通道,它们都是独立的;

       3)配置最小连接数和最大连接数;比如cpu可以同时并发128个线程,任务是部分需要操作数据库,部分不需要操作数据库的,通常同时操作数据库有64个线程,那么我们就把最小连接数设置为64,最多同时操作数据库为128个线程,那么我们就把最大连接数设置为128;

       4)需要一个队列管理连接;

       5)获取连接对象、归还连接对象

       6)连接池名字

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
44 14
|
3天前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
27 7
|
27天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
119 26
|
13天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
131 7
|
2月前
|
存储 NoSQL 关系型数据库
MySQL和Redis的区别
**MySQL和Redis的区别** MySQL和Redis都是流行的数据存储解决方案,但它们在设计、用途和特性上有显著区别。理解这些区别有助于选择合适的数据库来满足不同的应用需求。本文将详细介绍MySQL和Redis的区别,包括它们的架构、使用场景、性能和其他关键特性。 ### 一、基本概述 **MySQL**: MySQL是一个关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)进行数据管理。它支持事务、复杂查询和多种存储引擎,广泛应用于各种Web应用、企业系统和数据分析项目。 **Redis**: Redis是一个基于内存的键值数据库,通常被称为NoSQL数
133 4
|
NoSQL Java Redis
4、Redis连接池的构建与测试
首先我们在我们的项目中新建一个 RedisPool类 代码如下: package com.mmall.common; import com.mmall.
2157 0
|
16天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
158 85
|
3月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
85 6
|
14天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
2月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题