【Springboot知识】Springboot进阶-Micrometer指标监控深入解析
文章目录
- Micrometer 核心概念与标准指标详解
- **Micrometer 核心概念与标准指标详解**
- **一、Micrometer 核心概念**
- **二、Micrometer 标准指标**
- **1. JVM 监控指标**
- **2. 系统资源监控**
- **3. HTTP 请求监控**
- **4. 数据库监控**
- **5. 缓存监控**
- **三、配置与自定义指标**
- **1. 启用/禁用特定指标**
- **2. 添加自定义标签**
- **3. 指标命名规则**
- **四、监控数据展示示例(Prometheus)**
- **五、总结**
- springboot结合Micrometer
- **Spring Boot 集成 Micrometer 实现指标监控**
- **一、添加依赖**
- **二、配置监控端点**
- **三、自动采集的指标**
- **四、自定义业务指标**
- **1. 计数器(Counter)统计订单创建次数**
- **2. 计时器(Timer)统计方法耗时**
- **3. 仪表(Gauge)监控队列大小**
- **五、高级配置**
- **1. 全局标签(区分环境/区域)**
- **2. 过滤不需要的指标**
- **3. 自定义指标命名规则**
- **六、验证与可视化**
- **七、总结**
- 自定义一个Micrometer
- **一、自定义 MeterRegistry(监控数据上报)**
- **1. 实现自定义注册中心**
- **2. 注册自定义 Registry 到 Spring 上下文**
- **3. 配置 `application.properties`**
- **二、自定义指标采集逻辑**
- **1. 创建自定义 Meter(例如统计缓存穿透次数)**
- **2. 自定义 MeterFilter(过滤或修改指标)**
- **3. 动态标签(基于请求上下文)**
- **三、验证自定义效果**
- **四、注意事项**
- 关联知识
Micrometer 核心概念与标准指标详解
Micrometer 核心概念与标准指标详解
一、Micrometer 核心概念
Micrometer 是一款 监控指标门面库(类似 SLF4J 在日志领域的作用),为 Java 应用提供统一的监控指标采集接口,支持对接 Prometheus、Datadog、InfluxDB 等主流监控系统。以下是其核心组件:
| 概念 | 说明 |
|---|---|
| Meter | 指标的最小单元,表示一个可测量的值(如请求数、响应时间)。 |
| MeterRegistry | 管理所有 Meter 的注册中心,负责将指标发布到监控后端(如 Prometheus)。 |
| MeterProvider | 创建 Meter 的工厂,支持通过标签(Tags)动态生成指标。 |
| Tags | 键值对标签,用于为指标添加维度(如 method=GET, status=200)。 |
| Naming Convention | 指标命名规则(如 snake_case 或 camelCase),适配不同监控系统的要求。 |
二、Micrometer 标准指标
Micrometer 内置了多种 自动采集的指标,涵盖 JVM、系统资源、HTTP 请求等关键领域。
1. JVM 监控指标
| 指标名称 | 类型 | 说明 |
|---|---|---|
jvm.memory.used | Gauge | JVM 内存使用量(单位:字节) |
jvm.memory.committed | Gauge | JVM 已提交内存(包括未使用的预分配内存) |
jvm.threads.live | Gauge | 当前存活线程数 |
jvm.gc.pause | Timer | GC 暂停时间统计(次数、总耗时、最大耗时) |
jvm.classes.loaded | Gauge | 已加载的类数量 |
示例配置(自动启用):
management.metrics.enable.jvm=true
2. 系统资源监控
| 指标名称 | 类型 | 说明 |
|---|---|---|
system.cpu.usage | Gauge | 系统 CPU 使用率(0~1) |
process.cpu.usage | Gauge | 当前进程 CPU 使用率 |
process.files.open | Gauge | 进程打开的文件句柄数 |
process.uptime | Gauge | 进程运行时间(单位:秒) |
示例配置:
management.metrics.enable.process=true
management.metrics.enable.system=true
3. HTTP 请求监控
Spring Boot 自动为 Web 应用(如 Spring MVC)生成 HTTP 指标:
| 指标名称 | 类型 | 说明 |
|---|---|---|
http.server.requests | Timer | HTTP 请求耗时统计(次数、延迟、状态码等) |
http.client.requests | Timer | HTTP 客户端请求耗时(如 RestTemplate 调用) |
标签示例:
• method: HTTP 方法(GET/POST 等)
• uri: 请求路径(如 /api/users)
• status: HTTP 状态码(200/404/500 等)
启用配置:
management.metrics.enable.http=true
4. 数据库监控
集成 HikariCP、Tomcat JDBC 等连接池时自动生成:
| 指标名称 | 类型 | 说明 |
|---|---|---|
jdbc.connections.active | Gauge | 活跃数据库连接数 |
jdbc.connections.idle | Gauge | 空闲数据库连接数 |
jdbc.connections.max | Gauge | 最大允许连接数 |
标签示例:
• pool: 连接池名称(如 HikariPool-1)
5. 缓存监控
支持 Caffeine、EhCache 等缓存框架:
| 指标名称 | 类型 | 说明 |
|---|---|---|
cache.gets | Counter | 缓存查询次数(命中 + 未命中) |
cache.hits | Counter | 缓存命中次数 |
cache.size | Gauge | 缓存当前条目数 |
标签示例:
• name: 缓存名称(如 usersCache)
• result: 结果类型(hit/miss)
三、配置与自定义指标
1. 启用/禁用特定指标
# 禁用 JVM 内存指标
management.metrics.enable.jvm.memory.used=false
2. 添加自定义标签
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("region", "us-east-1", "env", "prod");
}
3. 指标命名规则
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsNaming() {return registry -> registry.config().namingConvention(NamingConvention.snakeCase);
}
四、监控数据展示示例(Prometheus)
从 /actuator/prometheus 端点获取的数据示例:
# HTTP 请求指标
http_server_requests_seconds_count{method="GET",uri="/api/users",status="200"} 42
http_server_requests_seconds_sum{method="GET",uri="/api/users",status="200"} 12.7# JVM 内存使用
jvm_memory_used_bytes{area="heap",id="PS Eden Space"} 256000000
五、总结
• 核心价值:
Micrometer 通过统一 API 屏蔽监控后端差异,开发者只需关注业务指标采集。
• 标准指标覆盖场景:
JVM、HTTP、数据库、缓存等关键组件均已内置监控,开箱即用。
• 扩展性:
通过自定义 MeterRegistry 和 Meter 可集成私有监控系统。
springboot结合Micrometer
Spring Boot 集成 Micrometer 实现指标监控
Micrometer 是 Spring Boot 的官方监控工具库,通过 Actuator 模块提供开箱即用的指标采集能力。以下是完整的集成与自定义指标实现步骤:
一、添加依赖
在 pom.xml 中添加核心依赖(以 Prometheus 为例):
<!-- Spring Boot Actuator(暴露监控端点) -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><!-- Micrometer 核心库 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-core</artifactId>
</dependency><!-- 对接 Prometheus 的 Registry -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
二、配置监控端点
在 application.properties 中启用端点并配置 Prometheus:
# 暴露所有 Actuator 端点(生产环境建议按需暴露)
management.endpoints.web.exposure.include=*# 配置应用名称(作为指标前缀)
management.metrics.tags.application=my-springboot-app# 配置 Prometheus 抓取间隔
management.metrics.export.prometheus.step=30s
三、自动采集的指标
Spring Boot 会 自动生成以下指标(无需额外代码):
| 指标类型 | 示例指标 | 说明 |
|---|---|---|
| JVM 监控 | jvm_memory_used_bytes | JVM 内存使用量 |
| HTTP 请求 | http_server_requests_seconds | HTTP 接口耗时统计 |
| 数据库连接池 | jdbc_connections_active | 活跃数据库连接数 |
| 系统资源 | system_cpu_usage | 系统 CPU 使用率 |
访问 http://localhost:8080/actuator/prometheus 查看原始指标数据。
四、自定义业务指标
1. 计数器(Counter)统计订单创建次数
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class OrderMetrics {private final Counter orderCreatedCounter;public OrderMetrics(MeterRegistry registry) {// 初始化计数器(带业务标签)orderCreatedCounter = Counter.builder("order.created").description("订单创建次数统计").tag("type", "online") // 静态标签.register(registry);}public void incrementOrderCreated(String userId) {// 动态添加标签(例如用户ID)orderCreatedCounter.bind(Tags.of("user", userId)).increment();}
}
在业务代码中调用:
@Autowired
private OrderMetrics orderMetrics;public void createOrder(Order order) {// 业务逻辑...orderMetrics.incrementOrderCreated(order.getUserId());
}
2. 计时器(Timer)统计方法耗时
使用 @Timed 注解自动记录方法耗时:
import io.micrometer.core.annotation.Timed;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/users")@Timed(value = "user.fetch.all", description = "查询所有用户的耗时")public List<User> getAllUsers() {// 业务逻辑...return userService.findAll();}
}
或手动记录代码块耗时:
import io.micrometer.core.instrument.Timer;public class PaymentService {private final Timer paymentTimer;public PaymentService(MeterRegistry registry) {paymentTimer = Timer.builder("payment.process.time").description("支付处理耗时").register(registry);}public void processPayment() {Timer.Sample sample = Timer.start(registry);try {// 支付业务逻辑...} finally {sample.stop(paymentTimer);}}
}
3. 仪表(Gauge)监控队列大小
import io.micrometer.core.instrument.Gauge;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.PostConstruct;
import java.util.Queue;@Component
public class MessageQueueMetrics {private final Queue<Message> messageQueue;private final AtomicInteger queueSize = new AtomicInteger(0);public MessageQueueMetrics(Queue<Message> messageQueue, MeterRegistry registry) {this.messageQueue = messageQueue;// 注册 Gauge(动态获取队列大小)Gauge.builder("message.queue.size", queueSize, AtomicInteger::get).description("消息队列当前大小").register(registry);}@Scheduled(fixedRate = 5000)public void updateQueueSize() {queueSize.set(messageQueue.size());}
}
五、高级配置
1. 全局标签(区分环境/区域)
@Bean
public MeterRegistryCustomizer<MeterRegistry> globalTags() {return registry -> registry.config().commonTags("env", "prod", "region", "us-east-1");
}
2. 过滤不需要的指标
@Bean
public MeterFilter excludeJvmThreadMetrics() {return MeterFilter.deny(id -> id.getName().startsWith("jvm.threads"));
}
3. 自定义指标命名规则
@Bean
public MeterRegistryCustomizer<MeterRegistry> namingConvention() {return registry -> registry.config().namingConvention(NamingConvention.snakeCase);
}
六、验证与可视化
-
查看原始指标:
访问http://localhost:8080/actuator/prometheus,搜索自定义指标(如order_created_total)。 -
对接 Prometheus + Grafana:
• 在prometheus.yml中添加 Spring Boot 应用的抓取配置:scrape_configs:- job_name: 'spring-boot-app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['localhost:8080']• 在 Grafana 中导入 Spring Boot 仪表板(如 ID 4701)。
七、总结
• 开箱即用:Spring Boot 自动采集 JVM、HTTP、DB 等核心指标。
• 灵活扩展:通过 Counter、Timer、Gauge 轻松添加业务指标。
• 生产就绪:结合 Prometheus + Grafana 实现监控告警与可视化。
自定义一个Micrometer
在 Spring Boot 中自定义 Micrometer 的核心是创建 自定义的 MeterRegistry 或 自定义指标采集逻辑。以下是详细步骤和代码示例:
一、自定义 MeterRegistry(监控数据上报)
1. 实现自定义注册中心
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.step.StepMeterRegistry;
import java.util.concurrent.TimeUnit;public class CustomMeterRegistry extends StepMeterRegistry {private final CustomRegistryConfig config;public CustomMeterRegistry(CustomRegistryConfig config, Clock clock) {super(config, clock);this.config = config;// 设置命名规则(如转驼峰为下划线)config().namingConvention(NamingConvention.snakeCase);start(); // 启动后台线程}@Overrideprotected void publish() {// 自定义上报逻辑(例如将指标发送到 Kafka 或 HTTP API)getMeters().forEach(meter -> {meter.match(gauge -> log.info("Gauge: {}={}", gauge.getId(), gauge.value()),counter -> log.info("Counter: {}={}", counter.getId(), counter.count()),timer -> log.info("Timer: {}={}s", timer.getId(), timer.totalTime(TimeUnit.SECONDS)),// 其他 Meter 类型处理...meter -> {});});}@Overrideprotected TimeUnit getBaseTimeUnit() {return TimeUnit.MILLISECONDS; // 定义时间单位}// 自定义配置类(继承 StepRegistryConfig)public static class CustomRegistryConfig extends StepRegistryConfig {public CustomRegistryConfig() {super("custom"); // 配置前缀为 "custom"}@Overridepublic String prefix() {return "custom.metrics";}}
}
2. 注册自定义 Registry 到 Spring 上下文
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MetricsConfig {@Beanpublic CustomMeterRegistry customMeterRegistry() {CustomMeterRegistry.CustomRegistryConfig config = new CustomMeterRegistry.CustomRegistryConfig();return new CustomMeterRegistry(config, Clock.SYSTEM);}
}
3. 配置 application.properties
# 自定义 Registry 参数
custom.metrics.step=30s # 数据上报间隔
custom.metrics.enabled=true
二、自定义指标采集逻辑
1. 创建自定义 Meter(例如统计缓存穿透次数)
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class CacheMetrics {private final Counter cachePenetrationCounter;public CacheMetrics(MeterRegistry registry) {// 定义指标名称、描述、标签cachePenetrationCounter = Counter.builder("cache.penetration").description("缓存穿透次数统计").tag("cache", "userCache").register(registry);}public void recordPenetration() {cachePenetrationCounter.increment();}
}
在业务代码中调用:
@Autowired
private CacheMetrics cacheMetrics;public User getUserById(Long id) {User user = cache.get(id);if (user == null) {cacheMetrics.recordPenetration(); // 记录穿透事件user = database.load(id);}return user;
}
2. 自定义 MeterFilter(过滤或修改指标)
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic MeterFilter renameTagFilter() {// 将标签名 "method" 改为 "http_method"return MeterFilter.renameTag("http.server.requests", "method", "http_method");}@Beanpublic MeterFilter denyTestEndpoints() {// 禁止统计 "/actuator" 端点的请求return MeterFilter.deny(id -> id.getName().startsWith("http.server.requests") && id.getTag("uri") != null && id.getTag("uri").startsWith("/actuator"));}
}
3. 动态标签(基于请求上下文)
使用 MeterFilter 添加动态标签(例如根据请求头添加租户 ID):
import org.springframework.web.servlet.HandlerInterceptor;public class TenantTagInterceptor implements HandlerInterceptor {private final MeterRegistry registry;public TenantTagInterceptor(MeterRegistry registry) {this.registry = registry;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String tenantId = request.getHeader("X-Tenant-ID");if (tenantId != null) {// 为所有指标添加租户标签registry.config().commonTags("tenant", tenantId);}return true;}
}
注册拦截器:
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate MeterRegistry registry;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TenantTagInterceptor(this.registry));}
}
三、验证自定义效果
-
查看原始指标数据
访问/actuator/prometheus,搜索自定义指标(如cache_penetration_total)。 -
日志验证
如果自定义的CustomMeterRegistry实现了日志输出,检查日志中是否打印指标数据。 -
集成测试
编写测试用例验证指标是否被正确记录:
@SpringBootTest
public class CacheMetricsTest {@Autowiredprivate CacheMetrics cacheMetrics;@Autowiredprivate MeterRegistry registry;@Testpublic void testCachePenetration() {cacheMetrics.recordPenetration();Counter counter = registry.find("cache.penetration").counter();assertThat(counter.count()).isEqualTo(1.0);}
}
四、注意事项
-
性能影响
避免在publish()方法中执行阻塞操作(如同步 HTTP 请求),使用异步或批处理上报。 -
标签基数爆炸
动态标签(如用户 ID)可能导致指标数量激增,建议仅用于低基数字段(如租户、区域)。 -
注册中心冲突
如果同时使用多个MeterRegistry(如 Prometheus 和自定义),确保指标不会重复上报。 -
命名规范
遵循监控系统的命名规则(如 Prometheus 要求小写和下划线)。
通过以上步骤,你可以在 Spring Boot 中灵活自定义 Micrometer,适配私有监控系统或实现特定业务指标的采集。
关联知识
【Springboot知识】Springboot进阶-Actuator深入理解
【Micrometer官网地址】
相关文章:
【Springboot知识】Springboot进阶-Micrometer指标监控深入解析
文章目录 Micrometer 核心概念与标准指标详解**Micrometer 核心概念与标准指标详解****一、Micrometer 核心概念****二、Micrometer 标准指标****1. JVM 监控指标****2. 系统资源监控****3. HTTP 请求监控****4. 数据库监控****5. 缓存监控** **三、配置与自定义指标****1.…...
Skyline配置指南-微信小程序
Skyline 是微信小程序推出的新一代渲染引擎,提供了更强大的渲染能力和更流畅的性能体验。以下是配置 Skyline 的详细步骤: 一、app.json文件配置 "componentFramework": "glass-easel", "lazyCodeLoading": "requi…...
Go 微服务框架 | 中间件
文章目录 定义中间件前置中间件后置中间件路由级别中间件 定义中间件 中间件的作用是给应用添加一些额外的功能,但是不会影响原有应用的编码方式,想用的时候直接添加,不想用的时候也可以轻松去除,实现所谓的可插拔。中间件的实现…...
Spring MVC 重定向(Redirect)详解
Spring MVC 重定向(Redirect)详解 1. 核心概念与作用 重定向(Redirect) 是 Spring MVC 中一种客户端重定向机制,通过 HTTP 302 状态码(默认)将用户浏览器重定向到指定 URL。 主要用途…...
项目开发流程总结
目录 1. 项目启动阶段(需求分析) 2. 项目设计阶段 3. 开发阶段 4. 测试阶段 5. 打包和发布阶段 6. 运维和监控阶段 7. 版本迭代和维护阶段 项目生命周期中的管理要点: 总结: 一个完整的项目开发流程通常包括以下几个阶段…...
window上 docker使用ros2开发并usbip共享usb设备
曾经参考 https://blog.csdn.net/laoxue123456/article/details/138339029 来共享windows上的usb 发现没有办法成功总是出现 tcp 错误。telnet测试能够正常连接 很是奇怪,window上换成低版本的usbipd仍然是同样的错误,没有办法的情况下参考了docker官方文…...
基于MATLAB/simulink的信号调制仿真--AM调制
实验内容: 假设y(t)(20.5*2cos(2*pi*1000*t))*5cos(2*pi*2*1e4*t)调幅系统,请将一个频率为1000HZ的余弦波信号,通过进行AM调制,载波信号频率为20kHZ的余弦波,调制度ma0.…...
Vue3+Ts封装ToolTip组件(2.0版本)
本组件支持hover和click两种触发方式,需要更多的触发方式,可自行去扩展!!! 1.传递三个参数: content:要展示的文本 position:文本出现的位置("top" | "t…...
Latex语法入门之数学公式
Latex是一种高质量的排版系统,尤其擅长于数学公式的排版。本文我将带大家深入了解Latex在数学公式排版中的应用。从基础的数学符号到复杂的公式布局,我们都会一一讲解,通过本文的学习,你将能够轻松编写出清晰、美观的数学公式&…...
shell脚本 - Linux定时温度监控-软硬件检测 - 服务器温度监控 - 写入日志
效果图 脚本 vi auto.sh (chmod x ./auto.sh) #!/bin/bash # 按照日期创建一个文件或目录 https://blog.csdn.net/shoajun_5243/article/details/83539069 datetimedate %Y%m%d-%H%M%S |cut -b1-20 dirpath/systemMonitor/$datetime file1$dirpath/sensors.log file2$dirpa…...
Linux驱动开发进阶(六)- 多线程与并发
文章目录 1、前言2、进程与线程3、内核线程4、底半步机制4.1、软中断4.2、tasklet4.3、工作队列4.3.1、普通工作项4.3.2、延时工作项4.3.3、工作队列 5、中断线程化6、进程6.1、内核进程6.2、用户空间进程 7、锁机制7.1、原子操作7.2、自旋锁7.3、信号量7.4、互斥锁7.5、comple…...
买不起了,iPhone 或涨价 40% ?
周知的原因,新关税对 iPhone 的打击,可以说非常严重。 根据 Rosenblatt Securities分析师的预测,若苹果完全把成本转移给消费者。 iPhone 16 标配版的价格,可能上涨43%。 iPhone 16 标配的价格是799美元,上涨43%&am…...
Axure 列表滚动:表头非常多(横向滚动方向)、分页(纵向滚动) | 基于动态面板的滚动方向和取消调整大小以适合内容两个属性进行实现
文章目录 引言I 列表滚动的操作说明see also共享原型引言 Axure RP9教程 【数据传输】(页面值传递)| 作用域 :全局变量、局部变量 https://blog.csdn.net/z929118967/article/details/147019839?spm=1001.2014.3001.5501 基于动态面板的滚动方向和取消调整大小以适合内容两…...
RBAC 权限控制:深入到按钮级别的实现
RBAC 权限控制:深入到按钮级别的实现 一、前端核心思路 1. 大致实现思路 后端都过SELECT连表查询把当前登录的用户对应所有的权限返回过来,前端把用户对应所有的权限 存起来to(vuex/pinia) 中 ,接着前端工程师需要知道每个按钮对应的权限代…...
大模型格式化输出的几种方法
大模型格式化输出的几种方法 在开发一些和LLM相关的应用的时候,如何从大模型的反馈中拿到结构化的输出数据是非常重要的,那么本文就记录几种常用的方法。 OpenAI提供的新方法 在 OpenAI 的 Python 库中,client.beta.chat.completions.parse 是一个用于生成结构化输出的方法…...
【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题
⭐️个人主页:小羊 ⭐️所属专栏:贪心算法 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 合并区间无重叠区间用最少数量的箭引爆气球俄罗斯套娃信封问题 合并区间 合并区间 class Solution { public:vector<vecto…...
JBDC java数据库连接(2)
目录 JBDC建立 获得PrepareStatement执行sql语句 形式: PrepareStatement中的方法: 实例 PreparedStatement和Statement 基于以下的原因: JBDC建立 获得PrepareStatement执行sql语句 在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数 形式&…...
es --- 集群数据迁移
目录 1、需求2、工具elasticdump2.1 mac安装问题解决 2.2 elasticdump文档 3、迁移 1、需求 迁移部分新集群没有的索引和数据 2、工具elasticdump Elasticdump 的工作原理是将输入发送到输出 。两者都可以是 elasticsearch URL 或 File 2.1 mac安装 前置:已经安装…...
Redis高频面试题及深度解析(20大核心问题+场景化答案)
摘要:Redis作为高性能缓存与内存数据库,是后端开发的核心技术栈之一。本文整理20大高频Redis面试题,结合真实场景与底层源码逻辑,助你彻底掌握Redis核心机制。涵盖单线程模型、集群方案、分布式锁、持久化等核心知识点。 一、Redi…...
事件处理程序
事件处理程序 一、事件处理程序的定义 事件处理程序是一段代码,用于响应特定的事件。在网页开发中,事件是在文档或浏览器窗口中发生的特定交互瞬间,如用户点击按钮、页面加载完成等。事件处理程序则是针对这些事件执行的函数,它能…...
stable diffusion部署ubuntu
stable-diffusion webui: https://github.com/AUTOMATIC1111/stable-diffusion-webui python3.10 -m venv venv(3.11的下torch会慢得要死) source venv/bin/activate 下载checkpoint模型放入clip_version"/home/chen/软件/stable-diffusion-webu…...
Qt的window注册表读写以及删除
Qt的window注册表读写以及删除 1. 使用 QSettings(Qt推荐方式)基本操作关键点限制 2. 调用Windows原生API示例:创建/读取键值常用API注意事项 3. 高级场景(1) 递归删除键(2) 注册表权限修改 4. 安全性建议总结其他QT文章推荐 在Qt中操作Windo…...
聊一聊接口测试时遇到上下游依赖时该如何测试
目录 一、手工测试时的处理方法 1.1沟通协调法 1.2模拟数据法 二、自动化测试时的处理方法 2.1 数据关联法(变量提取) 2.2 Mock数据法 2.3自动化框架中的依赖管理 三、实施示例(以订单接口测试为例) 3.1Mock依赖接口&…...
C++ 排序(1)
以下是一些插入排序的代码 1.插入排序 1.直接插入排序 // 升序 // 最坏:O(N^2) 逆序 // 最好:O(N) 顺序有序 void InsertSort(vector<int>& a, int n) {for (int i 1; i < n; i){int end i - 1;int tmp a[i];// 将tmp插入到[0,en…...
【有啥问啥】深入浅出讲解 Teacher Forcing 技术
深入浅出讲解 Teacher Forcing 技术 在序列生成任务(例如机器翻译、文本摘要、图像字幕生成等)中,循环神经网络(RNN)以及基于 Transformer 的模型通常采用自回归(autoregressive)的方式生成输出…...
zk基础—zk实现分布式功能
1.zk实现数据发布订阅 (1)发布订阅系统一般有推模式和拉模式 推模式:服务端主动将更新的数据发送给所有订阅的客户端。 拉模式:客户端主动发起请求来获取最新数据(定时轮询拉取)。 (2)zk采用了推拉相结合来实现发布订阅 首先客户端需要向服务端注册自己关…...
mySQL数据库和mongodb数据库的详细对比
以下是 MySQL 和 MongoDB 的详细对比,涵盖优缺点及适用场景: 一、核心特性对比 特性MySQL(关系型数据库)MongoDB(文档型 NoSQL 数据库)数据模型结构化表格,严格遵循 Schema灵活的文档模型&…...
ubuntu wifi配置(命令行版本)
1、查询当前设备环境的wifi列表 nmcli dev wifi list2、连接wifi nmcli dev wifi connect "MiFi-SSID" password "Password" #其中MiFi-SSID是wifi的密码,Password是wifi的密码3、查看连接情况 nmcli dev status...
Docker与Kubernetes在ZKmall开源商城容器化部署中的应用
ZKmall开源商城作为高并发电商系统,其容器化部署基于DockerKubernetes技术栈,实现了从开发到生产环境的全流程标准化与自动化。以下是核心应用场景与技术实现: 一、容器化基础:Docker镜像与微服务隔离 服务镜像标准化 分层构建…...
华为AI-agent新作:使用自然语言生成工作流
论文标题 WorkTeam: Constructing Workflows from Natural Language with Multi-Agents 论文地址 https://arxiv.org/pdf/2503.22473 作者背景 华为,北京大学 动机 当下AI-agent产品百花齐放,尽管有ReAct、MCP等框架帮助大模型调用工具࿰…...
