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

Linux云计算SRE-第十七周

1. 做三个节点的redis集群。

1、编辑redis节点node0(10.0.0.100)、node1(10.0.0.110)、node2(10.0.0.120)的安装脚本

[root@node0 ~]# vim install_redis.sh#!/bin/bash
# 指定脚本解释器为bashREDIS_VERSION=redis-7.2.7
# 定义Redis的版本号PASSWORD=123456
# 设置Redis的访问密码INSTALL_DIR=/apps/redis
# 指定Redis的安装目录CPUS=$(lscpu | awk '/^CPU\(s\)/{print $2}')
# 获取CPU核心数量,用于编译时的并行处理. /etc/os-release
# 加载系统发行版信息color () {# 定义一个函数,用于输出彩色文本信息RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $"  OK  "    elif [ $2 = "failure" -o $2 = "1"  ] ;then ${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo 
}prepare(){# 准备安装环境,安装Redis编译所需的依赖包if [ $ID = "centos" -o $ID = "rocky" ];thenyum  -y install gcc make jemalloc-devel systemd-develelseapt update apt -y install  gcc make libjemalloc-dev libsystemd-devfiif [ $? -eq 0 ];thencolor "安装软件包成功"  0elsecolor "安装软件包失败,请检查网络配置" 1exitfi
}install() {# 安装Redisif [ ! -f ${REDIS_VERSION}.tar.gz ]; then# 如果Redis源码包不存在,则下载wget http://download.redis.io/releases/${REDIS_VERSION}.tar.gz || { color "Redis 源码下载失败" 1; exit; }fitar xf ${REDIS_VERSION}.tar.gz -C /usr/local/src# 解压源码包到/usr/local/srccd /usr/local/src/${REDIS_VERSION}# 进入解压后的目录make -j $CPUS USE_SYSTEMD=yes PREFIX=${INSTALL_DIR} install && color "Redis 编译安装完成" 0 || { color "Redis 编译安装失败" 1; exit; }# 编译并安装Redis,使用CPU核心数量加速编译ln -s ${INSTALL_DIR}/bin/redis-* /usr/local/bin/# 创建Redis命令的软链接到/usr/local/binmkdir -p ${INSTALL_DIR}/{etc,log,data,run}# 创建Redis所需的目录结构cp redis.conf ${INSTALL_DIR}/etc/# 复制Redis配置文件到安装目录的etc子目录sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' \-e "/# requirepass/a requirepass $PASSWORD" \-e "/^dir .*/c dir ${INSTALL_DIR}/data/" \-e "/logfile .*/c logfile ${INSTALL_DIR}/log/redis-6379.log" \-e "/^pidfile .*/c pidfile ${INSTALL_DIR}/run/redis_6379.pid" ${INSTALL_DIR}/etc/redis.conf# 修改Redis配置文件,设置密码、数据目录、日志文件和PID文件路径if id redis &> /dev/null; thencolor "Redis 用户已存在" 1elseuseradd -r -s /sbin/nologin rediscolor "Redis 用户创建成功" 0fi# 检查Redis用户是否存在,不存在则创建chown -R redis.redis ${INSTALL_DIR}# 更改Redis安装目录的拥有者为redis用户cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOFsysctl -p# 修改系统内核参数并应用if [ $ID = "centos" -o $ID = "rocky" ]; thenecho 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.localchmod +x /etc/rc.d/rc.local/etc/rc.d/rc.localelseecho -e '#!/bin/bash\necho never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.localchmod +x /etc/rc.local/etc/rc.localfi# 禁用透明大页,根据系统类型选择不同的方法cat > /lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target[Service]
ExecStart=${INSTALL_DIR}/bin/redis-server ${INSTALL_DIR}/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT \$MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000[Install]
WantedBy=multi-user.target
EOF# 创建Redis的systemd服务文件systemctl daemon-reloadsystemctl enable --now redis &> /dev/null# 重新加载systemd配置,并启用Redis服务if [ $? -eq 0 ]; thencolor "Redis 服务启动成功,Redis信息如下:" 0elsecolor "Redis 启动失败" 1exitfi# 检查Redis服务是否启动成功,并输出相应信息sleep 2redis-cli -a $PASSWORD INFO Server 2> /dev/null# 等待2秒,然后使用redis-cli获取Redis服务器信息
}prepare
# 调用prepare函数准备环境install
# 调用install函数安装Redis

 2、构建redis节点node0(10.0.0.100)、node1(10.0.0.101)、node2(10.0.0.102)的集群。

[root@node0  ~]# bash install_redis.sh 
# 执行install_redis.sh脚本以安装Redis[root@node0  ~]# sed -i.bak  -e '/masterauth/a masterauth 123456'  -e '/# cluster-enabled yes/a cluster-enabled yes' -e '/# cluster-config-file nodes-6379.conf/a cluster-config-file nodes-6379.conf' -e '/cluster-require-full-coverage yes/a cluster-require-full-coverage no' /apps/redis/etc/redis.conf
# 使用sed命令修改Redis配置文件,启用密码认证、集群模式等[root@node0  ~]# systemctl restart redis
# 重启Redis服务以应用配置更改# 以下命令用于在其他节点上复制脚本、安装Redis并配置集群模式
[root@node1  ~]# scp install_redis.sh  10.0.0.110:/root
# 将脚本复制到node1
[root@node2  ~]# scp install_redis.sh  10.0.0.120:/root
# 将脚本复制到node2[root@node1  ~]# bash install_redis.sh 
# 在node1上执行脚本安装Redis
[root@node1  ~]# sed -i.bak  -e '/masterauth/a masterauth 123456'  -e '/# cluster-enabled yes/a cluster-enabled yes' -e '/# cluster-config-file nodes-6379.conf/a cluster-config-file nodes-6379.conf' -e '/cluster-require-full-coverage yes/a cluster-require-full-coverage no' /apps/redis/etc/redis.conf
# 修改node1上的Redis配置
[root@node1  ~]# systemctl restart redis
# 重启node1上的Redis服务[root@node2  ~]# bash install_redis.sh 
# 在node2上执行脚本安装Redis
[root@node2  ~]# sed -i.bak  -e '/masterauth/a masterauth 123456'  -e '/# cluster-enabled yes/a cluster-enabled yes' -e '/# cluster-config-file nodes-6379.conf/a cluster-config-file nodes-6379.conf' -e '/cluster-require-full-coverage yes/a cluster-require-full-coverage no' /apps/redis/etc/redis.conf
# 修改node2上的Redis配置
[root@node2  ~]# systemctl restart redis
# 重启node2上的Redis服务[root@node0  ~]# redis-cli -a 123456  --cluster create 10.0.0.100:6379   10.0.0.110:6379   10.0.0.120:6379
# 使用redis-cli命令创建Redis集群,包含node0、node1和node2上的Redis实例
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: 6a1fcf17824b5b05000d222d4f5fc54f5eb95ba3 10.0.0.100:6379slots:[0-5460] (5461 slots) master
M: f54c4e03dd0e6d6c64804a0645d28a17012ffe16 10.0.0.110:6379slots:[5461-10922] (5462 slots) master
M: 4c2d7e08d91d439b00f7d692269afc8073bd1597 10.0.0.120:6379slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join>>> Performing Cluster Check (using node 10.0.0.100:6379)
M: 6a1fcf17824b5b05000d222d4f5fc54f5eb95ba3 10.0.0.100:6379slots:[0-5460] (5461 slots) master
M: 4c2d7e08d91d439b00f7d692269afc8073bd1597 10.0.0.120:6379slots:[10923-16383] (5461 slots) master
M: f54c4e03dd0e6d6c64804a0645d28a17012ffe16 10.0.0.110:6379slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@node0 ~]#redis-cli -a 123456 -c INFO replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:4f5c6acc29267a7c0abb5d99683fbb122b77c816
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0[root@node1 ~]#redis-cli -a 123456 -c INFO replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:273975d582c1f2dcce034819de2d425e085c550c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0[root@node2 ~]#redis-cli -a 123456 -c INFO replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:0e495f096ccffdace37cd7c452c3f6c5db44e69e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

2. 总结redis持久化的两种方式和原理

Redis 持久化是将内存数据存储到硬盘,防止服务器宕机导致数据丢失的机制,主要提供 RDB 和 AOF 两种方式:

一、RDB 持久化

原理:
1、快照式持久化:在特定时间点生成内存数据的二进制快照(RDB 文件,默认 dump.rdb),通过 rdbSave 函数将数据序列化写入文件。重启时通过 rdbLoad 函数加载数据到内存。
2、触发机制:
- 手动触发:
         SAVE:阻塞主线程生成快照,影响服务。
         BGSAVE:后台 fork 子进程生成快照,不阻塞主线程。
- 自动触发:通过配置文件 save <seconds> <changes> 设置条件(如 save 900 1 表示 900 秒内至少 1 次修改触发)。
优缺点:
优点:
        文件紧凑(二进制压缩),加载速度快,适合备份与灾难恢复。
缺点:
        数据可能丢失(两次快照间的修改未持久化)。
        大数据量时 fork 子进程可能占用较多内存,影响性能。

二、AOF 持久化

原理:
- 命令追加式持久化:记录所有写操作命令到文本文件(默认 appendonly.aof),重启时重放命令恢复数据。
- 写回策略(通过 appendfsync 配置):
         always:每次写操作同步写入磁盘,数据最安全但性能最低。
         everysec(默认):每秒批量同步,平衡安全与性能(最多丢失 1 秒数据)。
         no:依赖操作系统同步,性能最高但数据风险最大。
- 文件重写:
         目的:压缩冗余命令(如多次 set 同一键),生成更小的新 AOF 文件。
         实现:后台异步执行,不影响主线程处理新命令。
优缺点:
优点:
        数据安全性高(可配置实时/准实时持久化)。
        文件可读性强,支持手动修复或恢复误操作。
缺点:
        文件体积较大,恢复速度慢于 RDB。
        高并发写入时可能影响性能(尤其是 always 模式)。

三、总结
对比项RDBAOF
数据安全性可能丢失部分数据更高(依赖策略)
文件大小小(二进制压缩)大(文本记录命令)
恢复速度快(直接加载内存快照)慢(逐条执行命令)
性能影响fork 子进程可能占用内存频繁写入可能增加 I/O 压力

实际应用建议

  • 高安全性场景:启用 AOF(everysec 模式)。
  • 快速恢复场景:启用 RDB。
  • 综合方案:同时开启 RDB + AOF(RDB 用于定期备份,AOF 保障实时数据安全)。

3.从内核事件原理层面阐述为什么redis这么快

        Redis的极致性能来源于多个层面的协同优化,尤其在内核事件处理机制上表现突出。从内核事件原理层面来看,主要归因于以下几个关键因素:

一、内存存储:内核访问的物理基础

        Redis 将数据存储在内存中,内存的直接访问速度是磁盘的 10^5~10^6 倍,避免了磁盘 I/O 的阻塞问题。

  • 内核与内存协作
    内核通过页缓存(Page Cache)和直接内存映射(mmap)机制管理内存,Redis无需频繁与磁盘交互,所有操作均在用户态内存中完成,减少了系统调用和上下文切换次数。

  • 零拷贝优化
    当 Redis 响应客户端请求时,数据从内存直接写入内核的套接字缓冲区(Socket Buffer),通过sendfile或writev系统调用实现零拷贝传输,减少数据在内核态与用户态之间的复制开销。

二、单线程模型与事件驱动:内核事件的高效调度

        Redis 采用 单线程 Reactor 模式,结合 I/O 多路复用技术,最大化利用内核的事件通知机制。

  1. I/O 多路复用的内核实现

    • 使用 epoll(Linux)或 kqueue(BSD)监听所有客户端连接的套接字。

    • 当某个套接字就绪(可读/可写)时,内核通过事件回调通知 Redis 主线程,触发对应的文件事件处理器。

    • 优势

      • 水平触发(LT):确保事件不丢失,适合 Redis 的请求处理模式。

      • 边缘触发(ET):减少重复通知,提升效率。

  2. 单线程的优势

    • 零锁竞争:无需处理多线程的锁同步问题,避免死锁和上下文切换开销。

    • 无阻塞操作:所有操作(命令执行、响应发送)均非阻塞,主线程专注于事件循环。

  3. 事件循环(aeEventLoop)

    • 核心流程

      1. 通过 epoll_wait 监听就绪事件。

      2. 将事件分发给对应的处理器(如命令请求处理器、命令回复处理器)。

      3. 处理完所有就绪事件后,检查时间事件(如定时任务)。

    • 优先级策略:优先处理文件事件(用户请求),确保实时性。

三、高效数据结构:减少内核交互开销

        Redis 的数据结构设计以内存高效访问和低系统调用频率为目标:

  1. SDS(简单动态字符串)

    • 预分配内存空间,减少 malloc 系统调用次数。

    • 记录字符串长度,避免遍历计算长度(O(1) 时间复杂度)。

  2. 跳表(Skip List)

    • 多层索引结构加速范围查询,减少遍历次数。

    • 内存连续访问模式,提升 CPU 缓存命中率。

  3. 压缩列表(ZipList)

    • 紧凑内存布局,减少内存碎片和缺页中断(Page Fault)概率。

四、持久化机制:内核的异步协作

        Redis 通过fork子进程实现 RDB 和 AOF 持久化,利用内核的写时复制(Copy-On-Write)机制:

  • RDB 快照

    • 子进程通过fork创建,共享父进程内存页。

    • 内核在父进程修改内存时触发写时复制,子进程独立持久化数据,避免阻塞主线程。

  • AOF 日志

    • 主线程将命令追加到内核缓冲区,子进程异步刷盘,通过 fsync 控制同步策略(如 everysec 平衡性能与安全)。

五、通信协议:内核缓冲区的批量处理

        Redis 使用 RESP 协议,通过批量数据格式减少网络传输次数:

  • 批量数据格式:将多个命令或响应合并传输,减少 read/write 系统调用次数。

  • 内核缓冲区优化

    • 客户端请求和响应数据先写入内核缓冲区,由内核异步完成网络传输,避免主线程阻塞。

    • 通过TCP_CORK 或 Nagle 算法合并小包,减少网络报文数量。

优化维度内核事件原理的体现性能收益
内存存储避免磁盘 I/O 阻塞,依赖内核页缓存和零拷贝技术读写延迟低至微秒级
单线程与事件驱动基于 epoll 的事件通知机制,无锁无上下文切换单线程吞吐量达 10W+ QPS
数据结构减少内存碎片和系统调用,提升 CPU 缓存命中率复杂操作(如范围查询)效率高
持久化子进程与写时复制(COW)机制,避免主线程阻塞持久化过程对服务影响极小
通信协议批量数据格式 + 内核缓冲区异步传输网络传输效率高,延迟波动小

        综上所述,Redis之所以能够在性能上表现出色,主要得益于其基于内存的存储设计、单线程模型与事件驱动机制、高效的数据结构设计、持久化机制以及高效的通信协议等多个方面的优势。Redis 通过内核事件机制的高效调度,结合内存存储、单线程模型和数据结构优化,在高并发、低延迟、高吞吐场景下表现卓越,成为内存数据库的标杆。 

相关文章:

Linux云计算SRE-第十七周

1. 做三个节点的redis集群。 1、编辑redis节点node0(10.0.0.100)、node1(10.0.0.110)、node2(10.0.0.120)的安装脚本 [rootnode0 ~]# vim install_redis.sh#!/bin/bash # 指定脚本解释器为bashREDIS_VERSIONredis-7.2.7 # 定义Redis的版本号PASSWORD123456 # 设置Redis的访问…...

K8S学习之基础十八:k8s的灰度发布和金丝雀部署

灰度发布 逐步扩大新版本的发布范围&#xff0c;从少量用户逐步扩展到全体用户。 特点是分阶段发布、持续监控、逐步扩展 适合需要逐步验证和降低风险的更新 金丝雀部署 将新版本先部署到一小部分用户或服务器&#xff0c;观察其表现&#xff0c;再决定是否全面推广。 特点&…...

WSL with NVIDIA Container Toolkit

一、wsl 下安装 docker 会提示安装 docekr 桌面版&#xff0c;所以直接安装 docker 桌面版本即可 二、安装 NVIDIA Container Toolkit NVIDIA Container Toolkit仓库 https://github.com/NVIDIA/nvidia-container-toolkit​github.com/NVIDIA/nvidia-container-toolkit 安装…...

PAT线上考试 真题/注意细节(甲/乙级)

闲谈 从此以后&#xff01;参加竞赛&#xff01; 都要为自己留够足够的时间练习&#xff01; 都要为自己留够足够的时间练习&#xff01; 都要为自己留够足够的时间练习&#xff01; 重要的事情说三遍&#xff0c;毕竟这只是我参加各种竞赛的开始&#xff01; \(&#xff…...

springcloud sentinel教程

‌QPS&#xff08;Queries Per Second&#xff09;即每秒查询率 TPS&#xff0c;每秒处理的事务数目 PV&#xff08;page view&#xff09;即页面浏览量 UV 访问数&#xff08;Unique Visitor&#xff09;指独立访客访问数 一、初识Sentinel 什么是雪崩问题? 微服务之间相…...

摄相机标定的基本原理

【相机标定的基本原理与经验分享】https://www.bilibili.com/video/BV1eE411c7kr?vd_source7c2b5de7032bf3907543a7675013ce3a 相机模型&#xff1a; 定义&#xff1a; 内参&#xff1a;就像相机的“眼睛”。它描述了相机内部的特性&#xff0c;比如焦距&#xff08;镜头的放…...

HJ C++11 Day2

Initializer Lists 对于一个类P class P{P(int a, int b){cout << "P(int, int), a" << a << ", b " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), val…...

在 ASP.NET Core 中启用 Brotli 和 Gzip 响应压缩

在本文中&#xff0c;我们将探讨如何在 ASP.NET Core 应用程序中启用响应压缩&#xff0c;重点介绍 Brotli 和 Gzip 算法以及如何验证压缩是否有效。 什么是响应压缩&#xff1f; 响应压缩通过使用Brotli 或 Gzip等算法来最小化 HTTP 响应的大小。这些算法在传输文本资产&#…...

leetcode69.x 的平方根

题目&#xff1a; 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。…...

第11章 web应用程序安全(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的&#xff0c;已经过去3年时间了&#xff0c;最近利用闲暇时间&#xff0c;抓紧吸收&#xff0c;总的来说&#xff0c;第11章开始学习利用web应用程序安全&#xff0c;主要讲信息收集、dns以及burpsuite&#xff0c;现在的资产测绘也…...

flac、kgg、kgma格式音频转换MP3

1. 选择需要转换的音频文件 2. 下载闪电音频格式转换器 闪电音频格式转换器-全面覆盖常见音乐格式_音频合并分割_音频压缩 3. 买会员有点贵&#xff0c;也没必要&#xff0c;偶尔转换一次的&#xff0c;就去闲鱼买&#xff0c;两天会员9块钱。 4. 闲鱼卖家给兑换码&#xff0c…...

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件...

基于YOLO11深度学习的电瓶车进电梯检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

HTML5 表单属性

HTML5 表单属性 引言 HTML5作为新一代的网页标准,带来了许多新的特性和改进。在表单处理方面,HTML5引入了一系列新的表单属性,这些属性使得表单的创建和使用更加灵活和强大。本文将详细介绍HTML5表单属性,包括其功能、使用方法和注意事项。 一、HTML5表单属性概述 HTML…...

从0开始,手搓Tomcat

一、什么是Tomcat Tomcat 是一款开源的、轻量级的 Web 服务器&#xff0c;它不仅能够提供 HTTP 服务&#xff0c;还能够运行 Java Servlet 和 JavaServer Pages&#xff08;JSP&#xff09;。对于许多开发者来说&#xff0c;理解 Tomcat 的目录结构以及如何在该结构中组织应用…...

数列分块入门2

题目描述 给出一个长为 n n n 的数列&#xff0c;以及 n n n 个操作&#xff0c;操作涉及区间加法&#xff0c;询问区间内小于某个值 x x x 的元素个数。 输入格式 第一行输入一个数字 n n n。 第二行输入 n n n 个数字&#xff0c;第 i i i 个数字为 a i a_i ai​&a…...

【ThreeJS Basics 06】Camera

文章目录 Camera 相机PerspectiveCamera 透视相机正交相机用鼠标控制相机大幅度转动&#xff08;可以看到后面&#xff09; 控制组件FlyControls 飞行组件控制FirstPersonControls 第一人称控制PointerLockControls 指针锁定控制OrbitControls 轨道控制TrackballControls 轨迹球…...

postman接口请求中的 Raw是什么

前言 在现代的网络开发中&#xff0c;API 的使用已经成为数据交换的核心方式之一。然而&#xff0c;在与 API 打交道时&#xff0c;关于如何发送请求体&#xff08;body&#xff09;内容类型的问题常常困扰着开发者们&#xff0c;尤其是“raw”和“json”这两个术语之间的区别…...

docker1

前言 技术架构 单机架构 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 写入主的时候&#xff0c;要同步Mysql从的数据才可以 冷热分离架构 写的时候要写入主和缓存数据库 读的时候先去缓存看有没有&#xff0c;没有的话就去从数据库读数据 主要就是看这个数据是…...

RocketMQ延迟消息深度解析:原理、实践与性能调优

RocketMQ延迟消息深度解析&#xff1a;原理、实践与性能调优 编程相关书籍分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145884039 一、…...

RabbitMQ 高级特性解析:RabbitMQ 消息可靠性保障 (上)

RabbitMQ 核心功能 RabbitMQ 高级特性解析&#xff1a;RabbitMQ 消息可靠性保障 &#xff08;上&#xff09;-CSDN博客 RabbitMQ 高级特性&#xff1a;从 TTL 到消息分发的全面解析 &#xff08;下&#xff09;-CSDN博客 前言 最近再看 RabbitMQ&#xff0c;看了看自己之前写…...

大白话JavaScript实现一个函数,将数组中的元素进行去重

大白话JavaScript实现一个函数&#xff0c;将数组中的元素进行去重 答题思路 要实现数组元素去重的函数&#xff0c;核心思路是遍历数组&#xff0c;然后判断每个元素是否已经在新数组里存在&#xff0c;如果不存在就添加进去&#xff0c;存在则跳过。下面会介绍几种不同的实…...

PQL查询和监控各类中间件

1 prometheus的PQL查询 1.1 Metrics数据介绍 prometheus监控中采集过来的数据统一称为Metrics数据&#xff0c;其并不是代表具体的数据格式&#xff0c;而是一种统计度量计算单位当需要为某个系统或者某个服务做监控时&#xff0c;就需要使用到 metrics prometheus支持的met…...

uni_app实现下拉刷新

1. 在页面配置中启用下拉刷新 首先&#xff0c;你需要在页面的 pages.json 文件中启用下拉刷新功能。 {"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页","enablePull…...

C#类型转换基本概念

一、基本定义‌ C# 类型转换是将数据从一种类型转换为另一种类型的过程&#xff0c;分为 ‌隐式转换‌ 和 ‌显式转换‌ 两类‌。 强类型语言特性‌&#xff1a;C# 要求变量类型在编译时确定&#xff0c;类型转换需满足兼容性或显式规则‌。目的‌&#xff1a;处理不同数据类…...

【学习笔记】【DeepSeek AI 医生】2-2 AI家庭医生课程内容介绍

【DeepSeek AI 医生】2-4 项目详细分析及DeepSeek适用场景 一、Ollama部署二、可视化UI三、构建项目环境四、搭建项目架构五、Spring Al六、SSE服务端推送事件七、数据持久化八、线上部署 一、Ollama部署 Mac部署windows 部署ollama脚本、常用命令DeepSeek 提示词、角色、适用…...

DeepSeek使用教程--让DeepSeek生成精准题库

想让DeepSeek出好题&#xff0c;关键在于提示词的设计。总结了一个基本模板&#xff1a; 请帮我生成一套关于[学科/知识点]的题目&#xff0c;包括[题型]&#xff0c;难度为[简单/中等/困难]&#xff0c;适合[年级/学习阶段]的学生&#xff0c;总共[数量]道题。每道题请提供详细…...

数学之约数个数定理-阶乘约数

题目&#xff1a; 定义阶乘 n!123⋅⋅⋅n。 请问 100!&#xff08;100的阶乘&#xff09;有多少个正约数。 们需要计算 100! 的正约数的个数。阶乘 100! 的定义是&#xff1a; 100!123⋯100 直接计算 100!的值是不现实的&#xff0c;因为它是一个非常大的数。因此&#xf…...

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. &#xff08;函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…...

快乐数 力扣202

一、题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…...

Cpu100%问题(包括-线上docker服务以及Arthas方式进行处理)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…...

近三年图像超分辨率研究进展综述(轻量化方向)

一、图像超分辨率技术的近三年核心进展 1. 轻量化网络设计突破 轻量化模型是端侧部署的关键,近三年研究主要围绕参数压缩与计算效率提升展开: 11卷积与通道优化:SCNet提出全11卷积架构,通过逐点卷积替代传统33卷积,在保持重建质量的同时将模型参数减少60%以上。该设计通…...

成都亚恒云知教育咨询公司:绘画的风格如何学习与确定?

宝子们&#xff0c;好久不见&#xff01; 最近收到好多同学发给我们成都亚恒云知教育咨询有限公司创作的作品&#xff0c;同时也收到了有很多乖乖的询问&#xff1a;关于绘画&#xff0c;老师我没有属于自己的风格&#xff0c;怎么才能画出属于自己的风格的作品啊&#xff0c;…...

数据结构篇——串(String)

一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串&#xff08;s…...

Qwen架构与Llama架构的核心区别

我们在讨论Deepseek不同版本之间的区别时了解到,DeepSeek-R1的蒸馏模型分为Qwen和Llama两个系列,包括Qwen系列的0.5B、1.5B、3B、7B、14B、32B、72B和Llama系列的8B、70B。Qwen系列以阿里通义千问(Qwen)为基础模型架构(具体是Qwen-2.5),Llama系列以Meta的Llama为基础模型…...

uniapp或者vue 使用serialport

参考https://blog.csdn.net/ykee126/article/details/90440499 版本是第一位&#xff1a;否则容易编译失败 node 版本 18.14.0 npm 版本 9.3.1 electron 版本 30.0.8 electron-rebuild 版本 3.2.9 serialport 版本 10.0.0 需要python环境 main.js // Modules to control app…...

Linux和gcc/g++常用命令总结

目录 Linux命令总结 文件操作相关命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本处理操作命令 grep awk sed 进程管理操作相关命令 ps top htop kill pkill killall chmod chown 网络操作相关命令 ping ifconfig netstat ss lsof curl …...

Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式

路由组件和一般组件 路由组件 一般放到pages或view目录 一般组件 一般放到component目录 切换路由 切换路由时&#xff0c;组件和执行挂载和卸载 路由的工作模式 Hash模式 缺点 1.不美观&#xff0c;路径带#号 优点 1.兼容性好 一般适用于管理系统 History模式 缺点…...

MySQL如何给其他账号分配权限?

目录 基础权限分配流程 权限级别对照表 安全事项 MySQL数据库使用root账号为test账号分配权限的标准操作流程及注意事项&#xff1a; 基础权限分配 ‌1、root用户登录, 输入root密码后进入MySQL命令行环境‌ mysql -u root -p2、用户存在性校验 SELECT user,host FROM …...

记录一些面试遇到的问题

重载和重写的区别 重载是overload&#xff0c;覆盖是override 重载属于编译时多态&#xff0c;覆盖属于运行时多态 运行时多态和编译时多态 运行时多态指的是在运行的时候才知道要调用哪一个函数&#xff0c;编译时多态是指在编译的时候就知道调用哪一个函数。 运行时多态…...

Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术

文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战&#xff1a;运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…...

量子计算测试挑战:软件测试将如何迎接新纪元?

引言 在计算机技术的飞速发展中&#xff0c;量子计算(Quantum Computing)正成为下一个颠覆性的科技热点。随着谷歌、IBM、微软等科技巨头纷纷投入巨资研究量子计算&#xff0c;其应用场景正逐步扩展&#xff0c;从优化计算到密码安全&#xff0c;再到人工智能和材料科学。然而…...

Matlab实现车牌识别

车牌识别技术作为现代智能交通系统、安防监控以及诸多车辆管理应用场景中的关键环节&#xff0c;正发挥着日益重要的作用&#xff0c;它能够自动、快速且精准地从车辆图像或视频流中提取车牌信息&#xff0c;实现车辆身份的智能化识别。 技术原理 车牌识别主要依托于图像处理、…...

Autosar 诊断开发-CAN到CANFD的更改-基于ETAS软件

文章目录 前言CanIf配置CanTp配置EcuC配置生成代码差异总结 前言 从CAN切换到CANFD&#xff0c;如果不想重新进行cfggen的话&#xff0c;手动更改配置或许会更快一些&#xff0c;本文介绍诊断报文从CAN变为CANFD后&#xff0c;BSW模块中的更改。 注&#xff1a;本文不介绍MCAL…...

八、排序算法

一些简单的排序算法 8.1 冒泡排序 void Bubble_sort(int a[] , int len){int i,j,flag,tmp;for(i=0 ; i < len-1 ; i++){flag = 1;for(j=0 ; j < len-1-i ; j++){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 0;}}if(flag == 1){break;}}…...

TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”

近日&#xff0c;由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布&#xff0c;TON基金会确认成为本届嘉年华的冠名赞助商&#xff0c;并将于4月8日在主会场特别举办“TON生态日”专题Side Event&#xff0c;集中展现TON生态的最新技术…...

《A++ 敏捷开发》- 18 软件需求

需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品&#xff0c;以前都是扫二维码开箱&#xff0c;有些图书馆升级了使用指纹识别。 “是否新方法比以前好&#xff1f;”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…...

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

智谱AI-FunctionCall

智谱AI-FunctionCall 编写FuncationCall大模型的函数调用&#xff0c;先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...

[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署

标题&#xff1a;[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释&#xff1a;重要思想&#xff1a;使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁…...