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

【Prometheus】如何通过prometheus监控redis实时运行状态,并实现告警通知

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • 使用Prometheus监控Redis
    • 1、安装配置redis
      • 1)安装redis
      • 2)调整redis内使用的最大内存
      • 3)启动redis
    • 2、安装配置redis_exporter
      • 1)访问redis_exporter的github地址
      • 2)解压redis_exporter
      • 3)配置redis_exporter启动文件
      • 4)启动redis_exporter
      • 5)访问redis_exporter的metrics
    • 3、配置prometheus
      • 1)修改prometheus配置
      • 2)加载prometheus配置文件
      • 3)检查Prometheus的Status->Targets页面
      • 4)模拟产生Redis相关数据
    • 4、Redis常用指标与示例
      • 1)redis健康状态相关指标
      • 2)redis连接数相关指标
      • 3)redis内存相关指标
      • 4)redis命中率相关指标
      • 5)redis key相关指标
      • 6)redis执行命令操作相关指标
      • 7)redis备份相关指标
    • 5、redis告警规则文件
    • 1)编写redis告警规则文件
      • 2)查看告警规则
    • 6、导入redis图形
      • 1)导入一个redis的grafana的模板,ID为763
      • 2)运行一个redis的模拟数据脚本

使用Prometheus监控Redis

在现代微服务架构中,Redis被广泛应用于缓存、消息队列及其他场景。为了确保Redis集群的高可用性和性能,我们需要实时监控其状态与指标。本文将全面讲解如何通过prometheus监控redis运行的各项指标,让数据实时可知。

1、安装配置redis

1)安装redis

yum install redis -y

2)调整redis内使用的最大内存

vim /etc/redis/redis.conf
maxmemory 200mb

在这里插入图片描述

3)启动redis

systemctl start redis

redis本身就有info命令,可以哦查看redis状态,但是并不兼容prometheus的数据格式
在这里插入图片描述

因此,需要借助exporter来暴露指标

2、安装配置redis_exporter

1)访问redis_exporter的github地址

https://github.com/oliver006/redis_exporter
下载redis_exporter
在这里插入图片描述

直接下载最新版
在这里插入图片描述

2)解压redis_exporter

tar xf redis_exporter-v1.67.0.linux-amd64.tar.gz -C /etc/
ln -s /etc/redis_exporter-v1.67.0.linux-amd64/ /etc/redis_exporter

在这里插入图片描述

3)配置redis_exporter启动文件

先看下redis_exporter启动参数
在这里插入图片描述

默认监听地址是9121
在这里插入图片描述

systemd启动配置文件

cat /usr/lib/systemd/system/redis_exporter.service
[Unit]
Description=redis_exporter
Documentation=https://github.com/oliver006/redis_exporter
After=network.target
[Service]
ExecStart=/etc/redis_exporter/redis_exporter \
-redis.addr="redis://localhost:6379"
-redis.password=""-web.listen-address=":9121" \-web.telemetry-path="/metrics" \
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always
[Install]
WantedBy=multi-user.target

在这里插入图片描述

4)启动redis_exporter

systemctl enable redis_exporter.service --now

在这里插入图片描述

5)访问redis_exporter的metrics

http://10.10.0.32:9121/metrics
在这里插入图片描述

3、配置prometheus

1)修改prometheus配置

vim /etc/prometheus/prometheus.yml- job_name: "redis_exporter"static_configs:- targets: ["jingtian03:9121"]

2)加载prometheus配置文件

curl -X POST http://localhost:9090/-/reload

3)检查Prometheus的Status->Targets页面

验证 redis_exporter 是否已经成功纳入监控中
在这里插入图片描述

查看下指标
在这里插入图片描述

4)模拟产生Redis相关数据

执行如下脚本
1、Redis向db0库,插入了50个key,然后尝试随机获取100个key。由于总共的key只有50个,因此会有一半查询命中一半miss。
2、Redis向db1库,插入了100个key,但有60个key设定了过期时间;

[root@jingtian03 myredis ]#cat redis_data.sh 
#!/bin/bash
# 定义Redis主机和端口
REDIS_HOST=localhost
REDIS_PORT=6379
# Redis数据库定义
DB0=0
DB1=1
# 定义key的总数
TOTAL_KEYS=100
# 计算应设置过期时间的键的数量
EXPIRING_KEYS_COUNT=$(( TOTAL_KEYS * 60 / 100 ))
# 向Redis db0插入一半的key
for i in {1..50}
dokey="test-$i"value="test-$i"redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $DB0 SET $key $value
done
# 随机获取100个key,一部分将获取成功,一部分将miss
for i in {1..100}
dorandom_key_index=$(( ( RANDOM % TOTAL_KEYS ) + 1 ))key="test-$random_key_index"result=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $DB0 GET $key)if [ "$result" == "" ]thenecho "MISS: $key"elseecho "HIT: $key"fi
done
# 向Redis db1插入100个key,其中60%设置过期时间为10分钟
for i in {1..100}
dokey="expire-test-$i"value="value-$i"# 对前60%的键设置过期时间if [ $i -le $EXPIRING_KEYS_COUNT ]thenredis-cli -h $REDIS_HOST -p $REDIS_PORT -n $DB1 SET $key $value EX 600elseredis-cli -h $REDIS_HOST -p $REDIS_PORT -n $DB1 SET $key $valuefi
done

执行脚本
在这里插入图片描述

4、Redis常用指标与示例

针对Redis服务,我们可以利用Google的四个黄金信号来监控其健康状况。
这些信号包括:
延迟:监控平均命令响应时间,以评估处理请求的效率。
流量:跟踪每秒处理的命令数量、以及网络的输入/输出速度,以便理解服务负载。
错误:统计命令失败次数和连接被拒绝的情况,以识别潜在的服务问题。
饱和度:监测内存使用率和客户端连接数,以判断服务的负载情况和容量限制。

1)redis健康状态相关指标

在这里插入图片描述

启动多少秒是累加的,不断增大的,counter类型的,exporter将其标为gauge是错误的
在这里插入图片描述

案例1:检查Redis是否存活

sum(redis_up) by (instance,job)

在这里插入图片描述

案例2:检查Redis是否出现过重启,只需要判断启动时间是否小于1分钟即可。

sum(redis_uptime_in_seconds) by (instance,job) < 60# redis运行了多长时间
sum(redis_uptime_in_seconds) by (instance,job) / 3600 # 小时
sum(redis_uptime_in_seconds) by (instance,job) / 86400 # 天

2)redis连接数相关指标

在这里插入图片描述
在这里插入图片描述

默认允许的最大连接数为10000
在这里插入图片描述

案例1:查询当前 Redis 连接数与最大配置连接数的比率。
计算公式:( 当前客户端连接数 / 最大支持的客户端连接数 * 100 )

redis_connected_clients /redis_config_maxclients *100

在这里插入图片描述

案例2:查询过去1小时内是否有连接被拒绝,直接使用increase获取一个小时的增量数据

increase(redis_rejected_connections_total[1h])

在这里插入图片描述

3)redis内存相关指标

在这里插入图片描述
在这里插入图片描述

案例:redis当前使用的内存达到最大内存的比率。计算公式:( 当前内存 /最大内存 * 100 )

redis_memory_used_bytes / redis_memory_max_bytes * 100

在这里插入图片描述

4)redis命中率相关指标

在这里插入图片描述

案例1:查询最近5分钟,命令率和未命中率QPS

irate(redis_keyspace_hits_total[5m])
irate(redis_keyspace_misses_total[5m])

案例2:查询Redis最近5分钟,缓存成功命中率低于90% ,计算公式:(rate(5分钟成功的命中率) / ( 5分钟成功的命中率 + 5分钟失败的命中率) *100 )

irate(redis_keyspace_hits_total[5m]) / ( irate(redis_keyspace_hits_total[5m]) + irate(redis_keyspace_misses_total[5m]) ) * 100 < 90

5)redis key相关指标

在这里插入图片描述
在这里插入图片描述

案例1:计算Redis中,每个库即将过期的key,占每个库总key的比率。计算公式:( 每个库过期的key / 每个库总的key * 100 )

redis_db_keys_expiring / redis_db_keys * 100

在这里插入图片描述

案例2:计算Redis最近5分钟,即将被驱逐的Key,占总key的比率。计算公式:( rate(最近5分钟被驱逐的Key) / 总的key * 100 )

sum(rate(redis_evicted_keys_total[5m])) by (instance,job) / sum (redis_db_keys) by (instance,job) * 100

在这里插入图片描述

6)redis执行命令操作相关指标

在这里插入图片描述

在这里插入图片描述

案例1:计算Redis每分钟,成功处理命令的QPS

irate(redis_commands_processed_total[1m])
# 模拟Redis的QPS小脚本
while true;do
redis-cli keys "*"
redis-cli set a b
redis-cli get a 
sleep 0.1
done

在这里插入图片描述

案例2:计算Redis最近5分钟,命令执行失败占执行命令总数的比率。
计算公式:( irate(最近5分钟失败的命令数量) / irate(最近5分钟执行命令的总数量) * 100 )

# 计算不同命令的失败率。
irate(redis_commands_failed_calls_total[5m]) / irate(redis_commands_total[5m]) * 100
# 计算总的失败比率
sum (irate(redis_commands_failed_calls_total[5m])) by (instance,job)
/
sum (irate(redis_commands_total[5m])) by (instance,job) * 100

案例3:计算Redis最近5分钟,被拒绝执行的命令占执行命令总数的比率。
计算公式:( irate(最近5分钟拒绝的命令数量) / irate(最近5分钟执行命令的总数量) * 100 )

# 计算不同命令的拒绝率。
irate(redis_commands_rejected_calls_total[5m]) / irate(redis_commands_total[5m]) * 100
# 计算总的拒绝率
sum (irate(redis_commands_rejected_calls_total[5m])) by (instance,job)
/
sum (irate(redis_commands_total[5m])) by (instance,job) * 100

案例4:计算Redis在过去5分钟内每个成功执行的命令,平均响应时间。
计算公式:( irate(5分钟所花费总的时间) / rate(5分钟执行成功命令的次数))

sum(rate(redis_commands_duration_seconds_total[5m])) by (instance,job)
/
sum (rate(redis_commands_processed_total[5m])) by (instance,job)

7)redis备份相关指标

RDB方式备份
在这里插入图片描述

案例1:上一次RDB备份失败。

redis_rdb_last_bgsave_status == 0

案例2:上一次RDB备份成功,但是备份时长超过了3s

redis_rdb_last_bgsave_duration_sec > 3 and redis_rdb_last_bgsave_status ==1

案例3:超过10小时没有生成新的RDB备份文件。
计算公式:( (当前时间戳- 上一次RBD备份文件时间戳 ) > 36000 ),10小时等于36000秒( 60 *60 * 10 )

(time() - redis_rdb_last_save_timestamp_seconds) > 36000

AOF备份

redis_aof_enabled:1                    AOF日志是否启用
redis_aof_rewrite_in_progress:0                表示当前是否在进行写入AOF日志操作
redis_aof_rewrite_scheduled:0            是否有AOF操作等待执行。
redis_aof_last_rewrite_time_sec:-1        表示上次写入AOF日志的时间戳
redis_aof_current_rewrite_time_sec:-1            当前正在执行的AOF重写操作已经消耗的时间。
redis_aof_last_bgrewrite_status:ok        表示上次执行AOF日志重写的状态
redis_aof_last_write_status:ok            表示上次写入AOF日志的状态
redis_aof_last_cow_size:0                AOF执行中父进程与子进程相比执行了多少修改
redis_aof_current_size:0                        AOF日志的当前大小
redis_aof_base_size:0                    最近一次重写后AOF日志的大小。
redis_aof_pending_rewrite:0                    是否有AOF操作在等待执行。
redis_aof_buffer_length:0                AOF缓冲区的大小。
redis_aof_rewrite_buffer_length:0                AOF重写缓冲区的大小。
redis_aof_pending_bio_fsync:0            在等待执行的fsync操作的数量。
redis_aof_delayed_fsync:0                fsync操作延迟执行的次数。

5、redis告警规则文件

1)编写redis告警规则文件

cat /etc/prometheus/rules/redis_rules.yml
groups:
- name: redis告警规则rules:- alert: Redis实例宕机expr: sum(redis_up) by (instance, job) == 0for: 1mlabels:severity: criticalannotations:summary: "Redis实例宕机, {{ $labels.instance }} "description: "Redis实例 {{ $labels.instance }} 在过去1分钟内无法连接。"- alert: Redis实例重启expr: sum(redis_uptime_in_seconds) by (instance, job) < 60for: 0mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 重启"description: "Redis实例 {{ $labels.instance }} 出现重启。当前运行时间:{{ $value }} 秒。"- alert: Redis连接数过高expr: redis_connected_clients / redis_config_maxclients * 100 > 80for: 5mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 连接数超过80%"description: "Redis实例 {{ $labels.instance }} 当前连接数占最大连接数的比率超过80%。当前比率: {{ $value }}%。"- alert: Redis连接被拒绝expr: increase(redis_rejected_connections_total[1h]) > 0for: 5mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 有连接被拒绝"description: "Redis实例 {{ $labels.instance }} 在过去1小时内有连接被拒绝。当前被拒绝的连接数: {{ $value }}。"- alert: Redis内存使用率过高expr: redis_memory_used_bytes / redis_memory_max_bytes * 100 > 80for: 5mlabels:severity: criticalannotations:summary: "Redis实例 {{ $labels.instance }} 内存使用率超过80%"description: "Redis实例 {{ $labels.instance }} 当前内存使用率超过配置的最大内存值的80%。当前内存使用率: {{ $value }}%。"- alert: Redis缓存命中率低expr: |irate(redis_keyspace_hits_total[5m]) /(irate(redis_keyspace_hits_total[5m]) + irate(redis_keyspace_misses_total[5m])) * 100 < 90for: 10mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 缓存命中率低于90%"description: "Redis实例 {{ $labels.instance }} 最近5分钟内的缓存命中率低于90%。当前命中率: {{ $value }}%。"- alert: Redis即将过期的Key数量过多expr: |sum(redis_db_keys_expiring) by (instance, job, db) /sum(redis_db_keys) by (instance, job, db) * 100 > 50for: 5mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 中的数据库 {{ $labels.db}} 有过多即将过期的Key"description: "Redis实例 {{ $labels.instance }} 中的数据库 {{ $labels.db }} 有超过50%的Key即将过期。当前比率: {{ $value }}%。"- alert: RedisRDB备份失败expr: redis_rdb_last_bgsave_status == 0for: 1mlabels:severity: criticalannotations:summary: "Redis实例 {{ $labels.instance }} RDB备份失败"description: "Redis实例 {{ $labels.instance }} 最近的RDB备份尝试失败。"- alert: RedisRDB备份时间过长expr: redis_rdb_last_bgsave_duration_sec > 3 and redis_rdb_last_bgsave_status == 1for: 1mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} RDB备份成功但耗时超过3秒"description: "Redis实例 {{ $labels.instance }} RDB备份成功,但备份耗时超过了3秒。持续时间: {{ $value }}秒。"- alert: RedisRDB备份过期expr: (time() - redis_rdb_last_save_timestamp_seconds) > 36000for: 5mlabels:severity: criticalannotations:summary: "Redis实例 {{ $labels.instance }} 超过10小时未进行RDB备份"description: "Redis实例 {{ $labels.instance }} 已超过10小时没有生成新的RDB备份文件。"- alert: Redis命令拒绝率过高expr: |sum(irate(redis_commands_rejected_calls_total[5m])) by (instance, job) /sum(irate(redis_commands_total[5m])) by (instance, job) * 100 > 25for: 5mlabels:severity: warningannotations:summary: "Redis实例 {{ $labels.instance }} 命令拒绝率超过25%"description: "Redis实例 {{ $labels.instance }} 的命令拒绝率超过了25%。当前拒绝率: {{ $value }}%。"- alert: Redis命令平均响应时间过长expr: |sum(rate(redis_commands_duration_seconds_total[5m])) by (instance,job) /sum(rate(redis_commands_processed_total[5m])) by (instance, job) >0.250for: 5mlabels:severity: criticalannotations:summary: "Redis实例 {{ $labels.instance }} 命令平均响应时间超过250ms"description: "Redis实例 {{ $labels.instance }} 的执行命令平均响应时间超过了250毫秒。当前平均响应时间: {{ $value }}秒。"

2)查看告警规则

在这里插入图片描述

6、导入redis图形

1)导入一个redis的grafana的模板,ID为763

在这里插入图片描述

2)运行一个redis的模拟数据脚本

cat redis_basic_data.sh 
#!/bin/bash
# 模拟的 Redis 客户端数量
CLIENTS=199
# Redis 服务器配置
REDIS_HOST="localhost"
REDIS_PORT=6379
REDIS_PASSWORD="" # Redis 密码
# 生成随机字符串的函数,用于键和值
# $1 是生成的字符串长度
generate_random_string() {cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-32} | head -n 1
}# 模拟 Redis 客户端的行为
simulate_redis_client() {# 存储随机生成的键,用于后续的 GET 操作declare -a keys# 打开 redis-cli 的交互式会话(# 如果设置了密码,先认证if [[ -n "$REDIS_PASSWORD" ]]; thenecho "AUTH $REDIS_PASSWORD"fi# 持续发送命令while true; do# 生成随机键和值key=$(generate_random_string 10)value=$(generate_random_string 20)# 随机的过期时间,介于10到60秒之间ttl=$((RANDOM % 50 + 10))# SET 操作echo "SET $key $value EX $ttl"# 将键存储在数组中,用于模拟 GETkeys+=("$key")# 随机决定是否执行 GETif [ $((RANDOM % 2)) -eq 0 ]; then# 模拟命中和未命中if [ $((RANDOM % 10)) -lt 8 ]; then # 80% 概率尝试获取一个存在的键,模拟命中get_key="${keys[$((RANDOM % ${#keys[@]}))]}"else # 20% 概率尝试获取一个不存在的键,模拟未命中get_key=$(generate_random_string 10)fi# GET 操作echo "GET $get_key"fi# 操作间隔,减少服务器压力sleep 1done) | redis-cli -h $REDIS_HOST -p $REDIS_PORT --pipe
}
# 启动多个客户端
for ((i=0; i<CLIENTS; i++)); dosimulate_redis_client &echo "Started Redis client simulation $i"
done
# 等待所有后台进程
wait

客户端数量增加
在这里插入图片描述

相关文章:

【Prometheus】如何通过prometheus监控redis实时运行状态,并实现告警通知

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

ARM Cortex-M3/M4 权威指南 笔记【一】技术综述

一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC&#xff08;精简指令集&#xff09;处理器&#xff0c;其具有&#xff1a; 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据&#xff0c;Cortex-M 处理器&#xff08;以及其他任何 A…...

【Qt】定期清理程序

在现有Qt程序中实现可配置日志保存天数的代码示例&#xff0c;分为界面修改、配置存储和核心逻辑三部分&#xff1a; // 1. 在配置文件&#xff08;如settings.h&#xff09;中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...

基于51单片机的门禁刷卡器proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1j0KAmH5pVGWZWRpT6p5hBg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…...

二、数据持久化篇(深度增强版)

二、数据持久化篇&#xff08;深度增强版&#xff09; 2.1 JDBC Template深度解析 架构设计思想 #mermaid-svg-y2IrKiVu2gzenoCB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y2IrKiVu2gzenoCB .error-icon{fil…...

时间敏感和非时间敏感流量的性能保证配置

论文标题 中文标题&#xff1a; 时间敏感和非时间敏感流量的性能保证配置 英文标题&#xff1a; Provisioning of Time-Sensitive and non-Time-Sensitive Flows with Assured Performance 作者信息 Luis Velasco, Gianluca Graziadei, Sima Barzegar, Marc Ruiz Optical Co…...

k8s管理工具之lens

什么是lens Lens 是当前市场上最强大的K8S IDE。它是一个独立的单机应用&#xff0c;可以同时运行在macOS、Windows和Linux上。 作为K8S IDE&#xff0c;该有的它基本都有了&#xff01; 集群管理 导入已有集群 首先&#xff0c;你需要在 Lens 中添加你的 Kubernetes 集群。点…...

kafka介绍,kafka集群环境搭建,kafka命令测试,C++实现kafka客户端

目录 kafka介绍kafka集群环境搭建zookeeper安装与配置kafka安装与配置 kafka命令测试C实现kafka客户端librdkafka库编译新版本cmake编译cppkafka库编译C实现kafka生产者和消费者客户端 kafka介绍 定义与概述 Apache Kafka 是一个开源的分布式流处理平台&#xff0c;最初由 Lin…...

DeepSeek的蒸馏技术:让模型推理更快

DeepSeek系列模型&#xff0c;如DeepSeek-R1-Distill-Qwen-7B&#xff0c;采用了知识蒸馏&#xff08;Knowledge Distillation&#xff09;技术&#xff0c;这是一种强大的模型压缩和优化方法。通过蒸馏&#xff0c;DeepSeek模型在保持甚至提升性能的同时&#xff0c;实现了更快…...

SAP-ABAP:dialog界面中的数据块Event Block详解举例

在SAP的Dialog程序开发中&#xff0c;Event Block&#xff08;事件块&#xff09;是屏幕流逻辑&#xff08;Flow Logic&#xff09;中的关键部分&#xff0c;用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块&#xff08;Module&#xff09;结合使用&#x…...

微信小程序 - 模版语法

声明和绑定数据 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义 在将数据声明好以后&#xff0c;需要在 WXML 中绑定数据&#xff0c;数据绑定最简单的方式是使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来。 在 {{ }} 内部可以做…...

mapbox进阶,添加绘图扩展插件,裁剪线

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…...

Dav_笔记14:优化程序提示 HINTs -2

优化方法和目标的提示 ALL_ROWS和FIRST_ROWS&#xff08;n&#xff09;提示允许您在优化方法和目标之间进行选择。如果SQL语句具有指定优化方法和目标的提示&#xff0c;则优化程序将使用指定的方法&#xff0c;无论是否存在统计信息&#xff0c;OPTIMIZER_MODE初始化参数的值…...

Oracle ORA-00054

ORA-00054: resource busy and acquire with NOWAlT specified or timeout expire 错误 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 是 Oracle 数据库中常见的一个错误&#xff0c;通常发生在尝试获取一个已经被其他会话占用的资源时。这…...

ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输

案例概况 ABB能源自动化公司通过宏集Cogent DataHub软件将电厂设施的数据实时传输到公司办公室&#xff0c;实现了OPC隧道/镜像解决方案&#xff0c;在电厂和公司网络之间建立了一个安全、可靠的连接&#xff0c;确保数据传输的高度安全&#xff0c;减少入侵风险。 &#xff0…...

IP地址有哪些类型?

IP地址是计算机网络中用来识别和查找设备的唯一标识符。根据其作用和使用范围&#xff0c;IP地址可分为以下几种类型&#xff1a; 1.局域网IP地址 局域网IP地址又称内网IP地址&#xff0c;是局域网内用来识别和查找局域网设备的地址。局域网是一个相对较小的网络&#xff0c;…...

网络安全评估:保障设备与系统安全的关键

保障网络安全离不开对入网设备的安全评估&#xff0c;这种评估运用了多种技术和手段&#xff0c;对网络中的设备与系统进行详尽的检查。它能迅速发现并排除潜在的安全风险&#xff0c;对网络系统的安全稳定运行具有极其关键的作用。 测评目的 确保网络系统的安全与稳定是网络…...

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…...

管式超滤膜分离技术在茶澄清浓缩领域的创新应用

管式超滤膜分离技术在茶澄清浓缩领域展现出广阔的前景&#xff0c;其独特优势和应用效果正逐渐改变着茶饮料行业的生产方式。以下是几个关键点&#xff0c;说明了这一技术为何具有如此积极的发展潜力&#xff1a; 1. 高效澄清与保留风味 管式超滤膜具有高精度的过滤能力&#x…...

maven web项目如何定义filter

在 Maven Web 项目中定义一个 Servlet 过滤器&#xff08;Filter&#xff09;&#xff0c;需要遵循 Java Servlet 规范&#xff0c;并利用 Maven 来管理项目结构和依赖。下面是如何在 Maven Web 项目中定义和配置一个过滤器的基本步骤&#xff1a; 1. 创建过滤器类 首先&…...

如何在MacOS上查看edge/chrome的扩展源码

步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即&#xff1a;open ~/Librar…...

【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】CSS样式解析:行内、内部与外部样式的区别与优先级分析

简介 2025年计算机视觉研究进展与应用&#xff08;ACVRA 2025&#xff09;将于2025年2月28-3月2日在中国广州召开&#xff0c;会议将汇聚世界各地的顶尖学者、研究人员和行业专家&#xff0c;聚焦计算机视觉领域的最新研究动态与应用成就。本次会议将探讨前沿技术&#xff0c;…...

redis记录用户在线状态+活跃度

1.记录用户在线状态 redis的Bitmap记录用户在线状态 使用一个大的Bitmap,每个bit位对应一个用户IDbit值1表示在线,0表示离线用户ID与bit位的映射关系: bit位置 用户ID % bitmap容量 具体实现: # 用户上线时,设置对应bit为1 SETBIT online_users {user_id} 1# 用户下线时,设…...

vmware安装win7

1、版本说明 vmware workstation 16 win7 X64 2、安装步骤 安装步骤有点独特&#xff0c;先配置虚拟机&#xff0c;然后再虚拟机的虚拟光驱里添加下载的win7。 配置完了之后&#xff0c;点击要运行的虚拟机&#xff0c;然后一直往下走就可以完成系统的安装。 3、配置系统以解…...

OpenAI推出的Computer Use智能体:Operator是什么

OpenAI推出的Computer Use智能体:Operator是什么 是一款能像人一样与图形用户界面交互来操作计算机的AI智能体。以下是其核心原理及举例说明: 核心原理 感知: 屏幕截图获取:利用高性能屏幕捕获模块,如基于WebRTC的截图技术,以极低延迟获取高清晰度页面图像,为后续分析…...

[FastAdmin] 上传图片并加水印,压缩图片

1.app\common\library\Upload.php 文件 upload方法 /*** 普通上传* return \app\common\model\attachment|\think\Model* throws UploadException*/public function upload($savekey null){if (empty($this->file)) {throw new UploadException(__(No file upload or serv…...

二、k8s项目的生命周期

项目的生命周期 创建-----------》发布-----------》更新--------》回滚----------》删除 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 基于deployment控制器创建pod 控制器的名称是nginx1 pod使用的镜像:nginx:1.22 --replicas3 pod的数量有多少 3个…...

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 10

第10章_创建和管理表 DDL&#xff1a;数据定义语言。CREATE \ALTER\ DROP \RENAME TRUNCATE DML&#xff1a;数据操作语言。INSERT \DELETE \UPDATE \SELECT&#xff08;重中之重&#xff09; DCL&#xff1a;数据控制语言。COMMIT \…...

python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!

一、YAML详解 YAML是一种数据类型&#xff0c;它能够和JSON数据相互转化&#xff0c;它本身也是有很多数据类型可以满足我们接口 的参数类型&#xff0c;扩展名可以是.yml或.yaml 作用&#xff1a; 1.全局配置文件 基础路径&#xff0c;数据库信息&#xff0c;账号信息&…...

deepseek的CoT优势、两阶段训练的有效性学习笔记

文章目录 1 DeepSeek的CoT思维链的优势1.2 open-r1的CoT训练数据1.3 ReAct任务与CoT任务适用场景 2 AI推理方向&#xff1a;deepseek与deepmind的两条路线的差异2.1 PRM与ORM的两大学派分支的差异2.2 DeepSeek-R1的两阶段训练概述 1 DeepSeek的CoT思维链的优势 DeepSeek跟之前…...

计算机网络-MPLS转发原理

在上一篇关于 MPLS 基础的文章中&#xff0c;我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天&#xff0c;我们将深入探讨 MPLS 转发的原理与流程&#xff0c;帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…...

本地部署DeepSeek R1并搭建Web UI实现可视化交互的笔记

经过多天的挣扎和卸载了一些软件&#xff0c;终于下定决心在本地部署DeepSeek R1模型。部署和搭建过程非常简单和方便。 一、下载Ollama 进入Ollama官方网站(https://ollama.com),进入下载下载Ollama页面&#xff08;https://ollama.com/download&#xff09; 根据电脑的操作…...

港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。

今天给大家介绍一种名为BAG&#xff08;Body-Aligned 3D Wearable Asset Generation&#xff09;的新方法&#xff0c;可以自动生成可穿戴的3D资产&#xff0c;如服装和配饰&#xff0c;以适应特定的人体模型。BAG方法通过构建一个多视图图像扩散模型&#xff0c;生成与人体对齐…...

JUC并发—1.Java集合包底层源码剖析

大纲 1.为什么要对JDK源码剖析 2.ArrayList源码一&#xff1a;基本原理以及优缺点 3.ArrayList源码二&#xff1a;核心方法的原理 4.ArrayList源码三&#xff1a;数组扩容以及元素拷贝 5.LinkedList源码一&#xff1a;优缺点和使用场景 6.LinkedList源码二&#xff1a;双…...

使用Java爬虫获取京东商品评论API接口(JD.item_review)数据

一、引言 在电商领域&#xff0c;商品评论是用户决策的重要参考依据&#xff0c;也是商家优化产品和服务的重要数据来源。京东作为国内领先的电商平台&#xff0c;提供了丰富的API接口供开发者使用&#xff0c;其中JD.item_review接口可以获取商品的评论数据。通过这些数据&am…...

问卷数据分析|SPSS实操之单因素方差分析

适用条件&#xff1a; 检验分类变量和定量变量之间的差异 分类变量数量要大于等于三 具体操作&#xff1a; 1.选择分析--比较平均值--单因素ANOVA检验 2. 下方填分类变量&#xff0c;上方为各个量表数据Z1-Y2 3. 点击选项&#xff0c;选择描述和方差齐性检验 4.此处为结果数…...

【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)

文章目录 一、TextRank 算法提取关键词 [工具包]二、TextRank 算法提取关键短语[工具包]三、TextRank 算法提取关键句[工具包]四、TextRank 算法提取关键句&#xff08;Python源码实现&#xff09; 一、TextRank 算法提取关键词 [工具包] 见链接 【自然语言处理】TextRank 算法…...

Git的常用命令及常见问题处理方法

目录 一、介绍二、常用 Git 命令1. 配置用户信息2. 初始化仓库3. 克隆远程仓库4. 查看状态5. 添加文件到暂存区6. 提交更改7. 查看提交历史8. 查看文件差异9. 查看分支10. 切换分支11. 合并分支12. 处理冲突13. 远程操作14. 标签管理15. 撤销操作 三、常见问题处理方法1. 无法推…...

第6章 6.1 ASP.NET Core MVC 项目

6.1.1 ASP.NET Core MVC 项目的搭建 进入VS环境&#xff0c;创建新的项目&#xff0c;选择【ASP.Net Core Web 应用&#xff08;模型-视图-控制器&#xff09;】如下图所示 编写项目名称 点击创建&#xff0c;进入项目后结构如下所示 wwwroot 文件夹为图片、JS、CSS等静态文件…...

ios通过xib创建控件

之前写过ios动态创建控件及添加事件&#xff0c;纯手工代码写控件&#xff0c;虽然比较灵活&#xff0c;但是就是代码量比较多。这次我们通过xib来创建app下载列表项 AppView.xib。一个imageview,一个label,一个button构成 1.创建AppView.xib 2.再创建xib对应的mode&#xff0…...

缓存组件<keep-alive>

缓存组件<keep-alive> 1.组件作用 组件, 默认会缓存内部的所有组件实例&#xff0c;当组件需要缓存时首先考虑使用此组件。 2.使用场景 场景1&#xff1a;tab切换时&#xff0c;对应的组件保持原状态&#xff0c;使用keep-alive组件 使用&#xff1a;KeepAlive | Vu…...

SAP ABAP调用DeepSeek API大模型接口

搜索了一下DeepSeek&#xff0c;发现有人已经实现了SAP的对接&#xff0c; 不登录网页&#xff0c;SAP如何使用DeepSeek快速编程&#xff0c;ABAP起飞啦~ 按照对应的注册流程和方法。总算做出了第一个能够直连DeepSeek的API abap程序。 效果不错。 report ZTOOL_ABAP_CALL_D…...

大数据与大模型:数字时代的共生力量

引言&#xff1a;大数据与大模型的崭新时代 在数字化浪潮汹涌澎湃的当下&#xff0c;大数据与大模型无疑是最为耀眼的两颗明星 &#xff0c;深刻地改变着我们的生活、工作和思维方式。大数据&#xff0c;作为信息时代的宝藏&#xff0c;蕴含着无尽的价值。从电商平台的海量交易…...

服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用

Deepseek这段时间非常火&#xff0c;最新推理模型Deepseek R1&#xff0c;都想装上试一试&#xff0c;特别是部署到服务器教程网上一堆教程好像没几个部署成功靠谱的&#xff0c;先说服务器上下载Ollama就难倒一堆人&#xff0c;每次都超时。今天终于在宝塔看到一篇 应用安装文…...

Qt - 地图相关 —— 3、Qt调用高德在线地图功能示例(附源码)

效果 作者其他相关文章链接:           Qt - 地图相关 —— 1、加载百度在线地图(附源码)           Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)           Qt - 地图相关 —— 3、Qt调用…...

Idea集成deepseek生成代码

今天我带大家在idea上安装CodeGpt插件&#xff0c;这个插件可以根据我们的提示词生产代码&#xff0c;我们一起试试。 1、安装插件 打开idea&#xff0c;再点击setting菜单&#xff0c;按以下步骤操作。 安装完成后&#xff0c;一定要点击第四步“ok”。再次点击菜单setting…...

HTTP 请求方式`application/x-www-form-urlencoded` 与 `application/json` 怎么用?有什么区别?

HTTP 请求方式总结&#xff1a;application/x-www-form-urlencoded 与 application/json 在前后端交互中&#xff0c;客户端发送数据到服务器的常见方式有两种&#xff1a;application/x-www-form-urlencoded 和 application/json。本文将详细介绍这两种请求方式的特点、使用方…...

开发指南099-同时传递文件和参数

平台后台接口一般情况下要求传递一个json对象&#xff08;对应后台需要一个继承RequestInfo的dto类&#xff09;&#xff0c;某些情况下需要同时传递文件和参数&#xff0c;该如何处理呢&#xff1f; 1、前端 const formData new FormData(); formData.append(file, this.f…...

【Pycharm+Git+Gitlab】安装部署(粗糙版)

1、安装Git 2、安装Pycharm&#xff08;这里选择的是社区版&#xff09; 3、桌面右键打开Git Bash 1&#xff09;设置全局用户名&#xff08;准备连接的Gitlab仓库的访问用户名&#xff09; git config ---global user.name "username"2&#xff09;设置全局邮箱&…...

k8s中部署nginx的pod

在当今数字化的浪潮中&#xff0c;容器编排技术成为了构建和管理应用程序的核心力量。Kubernetes&#xff08;简称 k8s&#xff09;作为容器编排领域的佼佼者&#xff0c;凭借其强大的自动化部署、扩展和管理能力&#xff0c;深受开发者和运维人员的青睐。而 Nginx 作为一款高性…...