当前位置: 首页 > article >正文

redis close+连接参数设置+并发情况风险分析

1,如下代码 redis 为什么 client.close,不关闭会出现什么问题

public void confirm(String token, MenuHistoryVO menuHistoryVO) {if (StringUtil.isEmptyOrNull(token) || Objects.isNull(menuHistoryVO)) {return;}String key = getKey(token);JedisCommands client = null;try {client = redisPool.getSource();saveCache((Jedis) client, key, JSON.toJSONString(menuHistoryVO));} catch (JedisException e) {logger.error("menuHistory saveCache exception key: {}, value: {}", key, JSON.toJSONString(menuHistoryVO), e);} finally {if (client != null && client instanceof Jedis) {((Jedis) client).close();}}}

2,参数分析

redis:hosts: redis-*****.myhuaweicloud.comports: 6379password: *maxIdle: 100maxTotal: 100timeout: 300000 分析redis参数

3,maxIdle: maxTotal 如何动态变化的,二者什么关系

4,高并发情况连接设置

如果并发很高,每次查询都需要获取连接查询,并发几万的情况下,需要设置很大吗,如果设置比如200,每次查询完成后,可以及时释放连接吗

回答

1,

为什么要调用 client.close()

  1. 释放连接资源
    Redis 连接本质上是 TCP 连接,占用操作系统资源(如文件描述符)。close() 会将连接归还给连接池(如果使用连接池),或直接关闭底层 TCP 连接(如果未用连接池)。不关闭会导致资源逐渐耗尽。

  2. 维护连接池健康
    代码中的 redisPool.getSource() 表明使用了连接池(如 JedisPool)。连接池的容量是有限的,如果不通过 close() 归还连接,连接池中的可用连接会逐渐耗尽。最终新请求无法获取连接,导致应用阻塞或抛出异常。

  3. 防止内存泄漏
    Jedis 客户端内部会维护缓冲区、状态信息等资源。未关闭的连接可能导致这些资源无法被垃圾回收,长期累积后引发内存泄漏。

  4. 避免 Redis 服务端压力
    每个未关闭的 Redis 连接在服务端也会占用资源。如果客户端大量遗留空闲连接,可能导致 Redis 服务端性能下降甚至拒绝新连接。


如果不关闭 client 会怎样?

问题类型具体表现
连接池耗尽新请求无法获取 Redis 连接,抛出 JedisConnectionException: Could not get a resource
文件描述符耗尽操作系统限制进程最大文件描述符数,耗尽后无法建立新连接或文件操作。
内存泄漏Jedis 客户端对象和关联资源无法释放,应用内存占用持续增长。
Redis 服务端阻塞大量空闲连接占用 Redis 内存和 CPU,影响服务端处理性能。

2,

  • maxIdle100

    • 连接池最大空闲连接数,需根据并发量调整。过高会浪费资源,过低可能增加新建连接开销。

  • maxTotal100

    • 最大总连接数,与maxIdle一致时,表示连接池常驻100个连接。适用于并发稳定的场景,突发流量可能导致等待。

  • timeout300000(5分钟)

    • 通常指连接或操作超时时间。此值过长可能导致客户端线程阻塞,建议缩短为合理值(如5000毫秒)

3,

1. 参数定义

  • maxTotal
    连接池允许的最大总连接数(包括正在使用的连接 + 空闲连接)。

    • 当应用请求连接时,如果当前总连接数已达 maxTotal,新的请求将等待或失败(取决于 maxWaitMillis 配置)。

    • 类比:连接池的“容量上限”。

  • maxIdle
    连接池中允许保留的最大空闲连接数

    • 当应用释放连接回池中时,如果空闲连接数超过 maxIdle,多余的连接会被直接关闭,而非保留。

    • 类比:连接池的“常备空闲资源池”。


2. 动态变化逻辑

连接池的行为可以拆解为以下场景:

场景 1:请求连接时
  1. 应用发起连接请求。

  2. 连接池检查是否有空闲连接idle ≤ maxIdle):

    • 有空闲连接:直接分配一个空闲连接。

    • 无空闲连接:检查当前总连接数是否已达 maxTotal

      • 未达上限:创建新连接并分配。

      • 已达上限:等待可用连接(若配置了 maxWaitMillis),超时则抛异常。

场景 2:释放连接时
  1. 应用释放连接回池中。

  2. 连接池检查当前空闲连接数

    • 空闲数 < maxIdle:保留该连接,放入空闲池。

    • 空闲数 ≥ maxIdle:直接关闭该连接,减少资源占用。

    • 4. 典型动态过程示例

      假设配置为 maxTotal=200maxIdle=50

    • 低负载阶段

      • 应用使用 10 个连接,释放后空闲连接数为 10(< maxIdle=50),全部保留。

      • 总连接数保持在 10。

    • 突发高并发

      • 瞬间需要 200 个连接:

        • 连接池创建 200 个新连接(maxTotal=200)。

        • 使用完毕后,释放回池中。

      • 空闲连接数变为 200,但 maxIdle=50,因此关闭 150 个连接。

      • 最终保留 50 个空闲连接。

    • 持续中负载

      • 日常需要 80 个连接:

        • 先复用 50 个空闲连接,再创建 30 个新连接。

        • 使用后释放,空闲连接数变为 80(> maxIdle=50),关闭 30 个,保留 50。

4,

好的,用户现在的问题是,当并发很高,比如几万的情况下,是否需要将maxTotal设置得非常大,比如200是否足够,以及每次查询完成后能否及时释放连接。我需要仔细分析这个问题,并给出合理的解答。

首先,用户可能在使用Redis连接池时遇到了高并发下的性能问题,担心连接池配置不足。他们提到并发量几万,这确实是一个很高的数字,但需要明确的是,这里的“并发”是指每秒的请求量(QPS)还是同时活跃的线程数。如果是QPS几万,那么连接池的设置需要仔细调整;如果是同时有几万个线程在运行,每个线程都获取连接,那maxTotal必须足够大,否则会导致等待或失败。

接下来,用户的问题集中在两点:一是是否需要将maxTotal设置得非常大,比如200是否足够;二是连接是否能及时释放。我需要解释在高并发下连接池的工作原理,以及如何优化参数。

首先,maxTotal是连接池的最大总连接数。如果并发请求数超过maxTotal,多余的请求需要等待,直到有连接被释放。假设每个查询都需要一个连接,并且查询时间很短,那么maxTotal的大小直接影响系统的吞吐量。如果maxTotal设为200,而并发请求是几万,显然200是不够的,因为同时只能处理200个请求,剩下的请求会排队等待,导致延迟增加,甚至超时。

不过,这里可能存在误解。通常来说,高并发QPS并不一定需要maxTotal等于QPS。因为连接是可以复用的,每个连接处理完一个请求后会被释放回池中,供下一个请求使用。例如,如果每个请求的处理时间是10ms,那么一个连接在1秒内可以处理100个请求。因此,maxTotal的大小应根据QPS和每个请求的处理时间来计算。公式大概是:maxTotal ≈ QPS * avg_query_time / 1000。如果QPS是几万,比如3万,处理时间1ms,那么maxTotal需要30左右即可。但如果处理时间较长,比如100ms,那么maxTotal需要3000。所以用户需要明确他们的查询耗时情况。

用户提到设置200是否足够,这取决于他们的QPS和查询时间。如果200不够,会出现连接等待,导致延迟增加,甚至超时错误。需要监控连接池的活跃连接数和等待时间,来判断是否需要调整maxTotal。

另一个方面是连接的释放。用户担心每次查询完成后是否能及时释放。这里需要确认代码中是否正确释放连接。如果使用连接池,通常在获取连接后,使用try-with-resources或finally块来确保连接被释放回池中。如果代码中存在连接泄漏(未正确释放),那么即使maxTotal很大,连接也会被耗尽,导致问题。因此,确保正确释放连接是关键。

此外,maxIdle的设置也很重要。如果maxIdle设置过低,每次释放连接后,多余的连接会被关闭,导致下次需要重新创建,增加延迟。但在高并发下,保持较高的maxIdle可以减少新建连接的开销。不过,过高的maxIdle会占用过多内存,需要平衡。

用户提到并发几万的情况,如果是QPS,并且查询时间很短,可能不需要maxTotal很大。但如果并发是指同时的线程数,每个线程持有一个连接,那么maxTotal必须至少等于并发线程数,否则会阻塞。但通常,线程数不会设置到几万,因为线程上下文切换开销很大,一般会使用异步IO或反应式编程来处理高并发。

可能用户的应用场景是Web服务,处理大量并发请求,每个请求需要访问Redis。在这种情况下,使用连接池并合理配置maxTotal和maxIdle是关键。同时,使用异步客户端(如Lettuce的异步模式)可能更有效,避免阻塞线程,减少连接数需求。

总结用户的问题,需要分情况讨论:

1. 如果并发是QPS几万,但每个查询耗时很短,maxTotal不需要很大,但需要确保连接复用效率。

2. 如果并发是同时的线程数几万,每个线程占用一个连接,那么maxTotal必须足够大,但这通常不现实,需要优化架构,比如使用异步非阻塞模式。

3. 连接的及时释放依赖于代码的正确性,确保每次获取后都释放。

4. 监控和调整连接池参数,结合实际情况优化。

最后,需要建议用户检查他们的实际QPS、查询耗时、连接池监控数据,以及代码中的连接管理,从而做出合理的配置调整。

在高并发场景下(如每秒数万请求),合理配置 Redis 连接池参数至关重要。以下是针对 「高并发下连接池配置」 的深度解析和优化建议:

1. 高并发场景的核心矛盾

当并发请求量达到数万时,连接池需要满足以下需求:

  • 快速响应:避免因连接不足导致请求堆积。

  • 高效复用:减少频繁创建/销毁连接的开销(TCP握手、认证等)。

  • 资源可控:防止连接数过高导致Redis服务端过载或客户端内存溢出。

但直接设置 maxTotal=几万 是不现实的,原因如下:

  1. Redis服务端限制:单Redis实例的连接数默认上限为 10000(可调整但有限)。

  2. 客户端资源消耗:每个连接占用内存和文件描述符,数万连接可能导致客户端OOM。

  3. 性能瓶颈转移:高连接数可能引发Redis的CPU/内存竞争,反而降低吞吐量。


2. 连接池的关键逻辑与优化方向

2.1 连接复用效率
  • 核心公式

    text

    复制

    下载

    理论最小连接数 ≈ QPS × 平均请求耗时(秒)
    • 例如:QPS=3万,平均请求耗时=1ms,则理论最少需要 30000 × 0.001 = 30 个连接。

    • 结论:若业务逻辑能快速释放连接,maxTotal=200 可支持数万QPS。

  • 关键验证指标

    • 监控连接池的 active(活跃连接数):若长期接近 maxTotal,需扩容。

    • 监控 borrowWaitTime(获取连接的等待时间):若频繁超时,需优化配置。

2.2 连接释放可靠性
  • 确保释放:必须通过 try-finally 或 try-with-resources 确保连接归还:

    java

    复制

    下载

    // Java示例(Jedis)
    try (Jedis jedis = pool.getResource()) { // 自动释放jedis.get("key");
    }
  • 泄漏排查:若未正确释放连接,会导致连接池耗尽(即使 maxTotal 很大)。

    • 监控 idle(空闲连接数):若 idle ≈ 0 且 active ≈ maxTotal,可能泄漏。


3. 高并发下的配置建议

3.1 参数设置
参数建议值说明
maxTotal200~500根据 QPS × 平均耗时 动态调整,初始可设置 200,逐步压测优化。
maxIdle与maxTotal相同避免连接频繁重建,最大化复用效率。
minIdle50~100预热连接,防止突发流量延迟。
maxWaitMillis100~500ms超时快速失败,避免线程阻塞。
3.2 架构优化
  1. 异步非阻塞客户端

    • 使用 Lettuce(支持Netty异步IO)替代Jedis,单连接可处理多请求。

    • 示例:异步模式下,maxTotal=50 即可支持数万QPS。

  2. Redis集群分片

    • 将流量分散到多个Redis节点,降低单节点连接压力。

  3. 本地缓存降级

    • 高频读请求使用本地缓存(如Caffeine),减少Redis访问。


4. 压测与监控

4.1 压测工具
  • redis-benchmark:测试Redis服务端极限性能。

    bash

    复制

    下载

    redis-benchmark -h host -p 6379 -a password -c 200 -n 1000000
    • -c 200:模拟200并发连接。

    • -n 1000000:发送100万请求。

  • JMeter:模拟真实业务请求,观察连接池表现。

4.2 监控指标
指标健康状态异常处理
active / maxTotal<80%≥90% 时扩容 maxTotal
borrowWaitTimeP99 < maxWaitMillis延长 maxWaitMillis 或优化代码
created / destroyed波动平稳,无陡增检查连接泄漏或 maxIdle 过低

5. 实战示例

场景
  • QPS=5万,平均请求耗时=2ms,要求响应时间≤50ms。

配置

yaml

复制

下载

redis:maxTotal: 300          # 理论最小连接数 = 50000 × 0.002 = 100,留3倍余量maxIdle: 300minIdle: 100maxWaitMillis: 50
验证结果
  • active 峰值 ≈ 120,borrowWaitTime P99=30ms,满足需求。


6. 结论

  • 无需盲目增大 maxTotal:通过提升连接复用效率(异步客户端、快速释放),maxTotal=200 可支持数万QPS。

  • 确保连接释放:代码中必须通过严格资源管理避免泄漏。

  • 组合优化:连接池参数 + 异步架构 + 集群分片,才是高并发场景的最优解。

相关文章:

redis close+连接参数设置+并发情况风险分析

1&#xff0c;如下代码 redis 为什么 client.close&#xff0c;不关闭会出现什么问题 public void confirm(String token, MenuHistoryVO menuHistoryVO) {if (StringUtil.isEmptyOrNull(token) || Objects.isNull(menuHistoryVO)) {return;}String key getKey(token);JedisC…...

[密码学实战]GMT 0048-2016智能密码钥匙密码检测规范技术解析与实战指南

GMT 0048-2016智能密码钥匙密码检测规范技术解析与实战指南 引言 随着信息安全需求的升级&#xff0c;智能密码钥匙&#xff08;如USB Key、安全芯片等&#xff09;作为密码运算和密钥管理的核心设备&#xff0c;广泛应用于金融、政务、物联网等领域。中国国家密码管理局发布…...

Android OkHttp 框架的使用与源码、原理解析

一、引言 在如今的移动应用开发领域&#xff0c;网络交互已经成为了绝大多数 Android 应用不可或缺的一部分。无论是获取最新的资讯内容、同步用户数据&#xff0c;还是与后端服务器进行实时通信&#xff0c;高效且稳定的网络请求都是保障应用良好用户体验的基石。而 OkHttp 框…...

Qt C++ 解析和处理 XML 文件示例

使用 Qt C 解析和处理 XML 文件 以下是使用 Qt C 实现 XML 文件处理的几种方法&#xff0c;包括解析、创建和修改 XML 文件。 1. 使用 QXmlStreamReader (推荐方式) #include <QFile> #include <QXmlStreamReader> #include <QDebug>void parseXmlWithStr…...

快手砍掉本地生活的门槛

一场本地商家的效率革命。 作者|景行 编辑|杨舟 “两斤鸡翅根七块九&#xff0c;两盒蓝莓九块钱&#xff0c;两公斤卫生纸十四块九一提。” 这是朝阳佳惠超市&#xff0c;在快手一则普通的短视频内容。 佳惠超市在辽宁省朝阳市有22家分店&#xff0c;打开佳惠超市的相关快手…...

Python基础语法3

目录 1、函数 1.1、语法格式 1.2、函数返回值 1.3、变量作用域 1.4、执行过程 1.5、链式调用 1.6、嵌套调用 1.7、函数递归 1.8、参数默认值 1.9、关键字参数 2、列表 2.1、创建列表 2.2、下标访问 2.3、切片操作 2.4、遍历列表元素 2.5、新增元素 2.6、查找元…...

Vue 3中如何封装API请求:提升开发效率的最佳实践

在现代前端开发中&#xff0c;API请求是不可避免的一部分&#xff0c;尤其是与后端交互时。随着Vue 3的广泛应用&#xff0c;如何高效地封装API请求&#xff0c;既能提升代码的可维护性&#xff0c;又能确保代码的高复用性&#xff0c;成为了很多开发者关注的话题。 在本文中&…...

GitHub 趋势日报 (2025年04月17日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1Anduin2017/HowToCook程序员在家做饭方法指南。Programmer’s guide about how to cook at home (Simplified Chinese onl…⭐ 224…...

第5章-1 优化服务器设置

上一篇&#xff1a;《第4章-5 linux 网络管理》&#xff0c;接着服务器设置 本章我们将解释如何为MySQL服务器创建合适的配置文件。这是一个迂回的旅程&#xff0c;有许多兴趣点和可以俯瞰风景的短途旅程。这些短途旅程是必要的。确定合适配置的最短路径并不是从研究配置选项并…...

【AI】Windows环境安装SPAR3D单图三维重建心得

效果一览 左图为原始单个图像&#xff0c;右图为通过SPAR3D重建后的三维建模&#xff0c;可以看出效果还是不错的。 本地环境配置 系统&#xff1a;Windows 11 专业版CPU&#xff1a;i5-13400F内存&#xff1a;32GBGPU&#xff1a;RTX3060 12GBcuda&#xff1a;11.8conda&…...

桌面应用UI开发方案

一、基于 Web 技术的跨平台方案 Electron Python/Go 特点&#xff1a; 技术栈&#xff1a;前端使用 HTML/CSS/JS&#xff0c;后端通过 Node.js 集成 Python/Go 模块或服务。 跨平台&#xff1a;支持 Windows、macOS、Linux 桌面端&#xff0c;适合开发桌面应用。 生态成熟&…...

使用docker在manjaro linux系统上运行windows和ubuntu

因为最近项目必须要使用指定版本的solidworks和maxwell&#xff08;都只能在win系统上使用&#xff09;, 且目前的ubuntu容器是没有桌面的&#xff0c;导致我运行不了一些带图形的ros2功能。无奈之下&#xff0c;决定使用docker-compose写一下配置文件&#xff0c;彻底解决问题…...

Agent智能体ReAct机制深度解读:推理与行动的完美闭环

一、从Chain-of-Thought到ReAct的范式演进 1.1 传统决策机制的局限 #mermaid-svg-Jf3ygvgHcGciJvX8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Jf3ygvgHcGciJvX8 .error-icon{fill:#552222;}#mermaid-svg-Jf3y…...

在 Node.js 中使用原生 `http` 模块,获取请求的各个部分:**请求行、请求头、请求体、请求路径、查询字符串** 等内容

在 Node.js 中使用原生 http 模块&#xff0c;可以通过 req 对象来获取请求的各个部分&#xff1a;请求行、请求头、请求体、请求路径、查询字符串 等内容。 ✅ 一、基础结构 const http require(http); const url require(url);const server http.createServer((req, res)…...

Redis(01)Redis连接报错Redis is running in protected mode……的解决方案

一、引言&#xff1a;从一个典型连接错误说起 在分布式系统开发中&#xff0c;Redis 作为高性能缓存中间件被广泛使用。 然而&#xff0c;当我们首次部署 Redis 并尝试从外部客户端连接时&#xff0c;常常会遇到以下错误&#xff1a; DENIED Redis is running in protected m…...

18487.1-2015-解读笔记之四-交流充电之流程分析

前面简单分析了国标交流充电桩插枪监测逻辑和PWM控制逻辑&#xff0c;下面简单分析一下交流充电流程 附录A 交流充电连接过程和控制时序如下&#xff1a; 由此可以将充电流程大概分为几个阶段&#xff1a; 1.充电连接阶段 充电连接阶段CC&#xff08;电阻由无穷大到R4RC&…...

海外服务器安装Ubuntu 22.04图形界面并配置VNC远程访问指南

在云计算和远程工作日益普及的今天,如何高效地管理和使用海外服务器成为了一个热门话题。本文将详细介绍如何在海外的Ubuntu 22.04服务器上安装图形界面,并配置VNC服务来实现远程访问。无论您是开发者、系统管理员,还是只是想要更便捷地管理您的海外服务器,这篇指南都能为您…...

Linux 管道理解

一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”&#xff1a; 图解&#xff1a; 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤&#xff1a; ①首先要描述这个进程&#xff0c;为这个…...

国产RK3568+FPGA以 ‌“实时控制+高精度采集+灵活扩展”‌ 为核心的解决方案

RK3568FPGA方案在工业领域应用的核心优势 一、‌实时性与低延迟控制‌ ‌AMP架构与GPIO中断技术‌ 通过非对称多处理架构&#xff08;AMP&#xff09;实现Linux与实时操作系统&#xff08;RTOS/裸机&#xff09;协同&#xff0c;主核负责调度&#xff0c;从核通过GPIO中断响应紧…...

Pycharm(十五)面向对象程序设计基础

目录 一、面向对象基本概述 class 类名: 属性(类似于定义变量) 行为(类似于定义函数,只不过第一个形参要写self) 二、self关键字介绍 三、在类内部调用类中的函数 四、属性的定义和调用 五、魔法方法init方法 六、魔法方法str和del方法 七、案例-减肥 一、…...

华三(H3C)与华为(Huawei)设备配置IPsec VPN的详细说明,涵盖配置流程、参数设置及常见问题处理

以下是针对华三&#xff08;H3C&#xff09;与华为&#xff08;Huawei&#xff09;设备配置IPsec VPN的详细说明&#xff0c;涵盖配置流程、参数设置及常见问题处理&#xff1a; 一、华三&#xff08;H3C&#xff09;设备IPsec VPN配置详解 1. 配置流程 华三IPsec VPN配置主要…...

【消息队列RocketMQ】四、RocketMQ 存储机制与性能优化

一、RocketMQ 存储机制详解 1.1 存储文件结构​ RocketMQ 的存储文件主要分布在store目录下&#xff0c;该目录是在broker.conf配置文件中通过storePathRootDir参数指定的&#xff0c;默认路径为${user.home}/store 。主要包含以下几种关键文件类型&#xff1a;​ 1.1.1 Comm…...

结合地理数据处理

CSV 文件不仅可以存储表格数据&#xff0c;还可以与地理空间数据结合&#xff0c;实现更强大的地理处理功能。例如&#xff0c;你可以将 CSV 文件中的坐标数据转换为点要素类&#xff0c;然后进行空间分析。 示例&#xff1a;将 CSV 文件中的坐标数据转换为点要素类 假设我们有…...

店匠科技摘得 36 氪“2025 AI Partner 创新大奖”

全场景 AI 方案驱动跨境电商数智化跃迁 4 月 18 日,36 氪 2025 AI Partner 大会于上海盛大开幕。大会紧扣“Super App 来了”主题,全力探寻 AI 时代的全新变量,探索 AI 领域下一个超级应用的无限可能性。在此次大会上,跨境电商独立站 SaaS 平台店匠科技(Shoplazza)凭借“店匠跨…...

Joint communication and state sensing under logarithmic loss

摘要——我们研究一种基本的联合通信与感知设置&#xff0c;其中发射机希望向接收机传输一条消息&#xff0c;并同时通过广义反馈估计其信道状态。我们假设感知目标是获得状态的软估计&#xff08;即概率分布&#xff09;&#xff0c;而非通常假设的点估计&#xff1b;并且我们…...

测试基础笔记第十天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、查询语句1.基本查询2.条件查询3.模糊查询4.范围查询5.判断空 二、其他复杂查询1.排序2.聚合函数3.分组4.分页查询 一、查询语句 1.基本查询 – 需求1: 准备商…...

Geek强大的电脑卸载软件工具,免费下载

一款强大的卸载电脑软件工具,无需安装 免费下载...

Linux:41线程控制lesson29

1.线程的优点&#xff1a; • 创建⼀个新线程的代价要⽐创建⼀个新进程⼩得多 创建好线程只要调度就好了 • 与进程之间的切换相⽐&#xff0c;线程之间的切换需要操作系统做的⼯作要少很多 为什么&#xff1f; ◦ 最主要的区别是线程的切换虚拟内存空间依然是相同的&#x…...

基于Flask与Ngrok实现Pycharm本地项目公网访问:从零部署

目录 概要 1. 环境与前置条件 2. 安装与配置 Flask 2.1 创建虚拟环境 2.2 安装 Flask 3. 安装与配置 Ngrok 3.1 下载 Ngrok 3.2 注册并获取 Authtoken 4. 在 PyCharm 中创建 Flask 项目 5. 运行本地 Flask 服务 6. 启动 Ngrok 隧道并获取公网地址 7. 完整示例代码汇…...

Ai晚报20250423

Kortix 发布全球首个开源通用型 AI Agent——Suna&#xff0c;能像人类一样学习、推理和适应&#xff0c;通过自然对话帮助用户完成多种现实任务&#xff0c;支持浏览器自动化、文件管理等 20 个用户场景。腾讯混元大模型 AI 阅读助手“企鹅读伴”正式上线&#xff0c;为中小学…...