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

Windows .NET8 实现 远程一键部署,几秒完成发布,提高效率 - CICD

1. 前言

场景 (工作环境 一键部署 到 远端服务器 [阿里云])

在这里插入图片描述

CICD 基本步骤回顾

https://blog.csdn.net/CsethCRM/article/details/141604638

2. 环境准备

服务器端IP:106.15.74.25(阿里云服务器)
客户端:工作电脑/开发电脑

2.1 安装 7z

服务器 和 客户端(工作电脑) 均需安装
安装目录:C:\Program Files\7-Zip\7z.exe

2.2 安装 Open SSH

参照文章:https://blog.csdn.net/CsethCRM/article/details/141605350

2.3 SSH 服务器设置免密登录

参照文章:https://blog.csdn.net/CsethCRM/article/details/141854199

2.4 远端服务器准备 [ 阿里云 ]

在这里插入图片描述

2.5 本地开发环境 新建一个Web项目即可

CI.bat 放在项目目录

在这里插入图片描述

3.运行CI.bat,进行一键部署 【几秒钟就结束了】

点击CI.bat 进行一键部署项目源代码 -> publish -> 服务器部署 -> 站点正常运行 几秒钟就完成了

CI一键部署WebSite

一键部署完毕,服务器如下:

在这里插入图片描述

4. 改动代码,再次运行 CI.bat,服务器端已经是改变后的代码 【从改完代码到部署上线只要几秒钟】

改代码后,使用CI再次发布

5.总结

  • 掌握了 利用 bat 进行 cicd
  • 从编码结束 到 部署上线
  • 整个过程 只需要 几秒钟
  • 大大提高日常的效率

附录

CI.bat 参照(中文乱码时,文件要用GB2312 格式):

@echo off
setlocal EnableDelayedExpansion:: ---------- 时间统计输出 start
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a"
)
:start
set StartTimeTxt=CI开始时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
call :ColorText 0a "%StartTimeTxt%"
echo.
set StartTime=%time%
:: ---------- 时间统计输出 end:: 打开当前目录
cd /d %~dp0
:: 返回上一级
cd..:: ---------- 1. 自定义设置 start ...:: [ -- 自定义-- ] 设置7z的命令行程序路径  ↓↓↓ 7z环境设置
set zip7=C:\Program Files\7-Zip\7z.exe:: [ -- 自定义-- ] 发布环境 ↓↓↓ 多环境设置
set Env=Staging:: [ -- 自定义-- ] 项目名称,发布使用  ↓↓↓ 发布Web站点的设置
set PrjName=MyMvcWeb
:: [ -- 自定义-- ] 解决方案目录 
set SlnDir=D:\vscode-workspace\MyWeb
:: [ -- 自定义-- ] 启动项目
set csproj=MyMvcWeb\MyMvcWeb.csproj  
:: [ -- 自定义-- ] 本地暂存盘,建议发布相关的操作目录都在此盘符下,避免不断用命令切盘符 
set DriveLetterLocal=D:
:: [ -- 自定义-- ] Web发布包输出文件夹根目录
set OutRoot=%DriveLetterLocal%\ci-web-pkgs\
:: [ -- 自定义-- ] Web 发布包目录,这个包最终会传输至发布服务器进行发布
set OutDir=%OutRoot%%PrjName%\:: [ -- 自定义-- ] SSH地址  ↓↓↓ 远程服务器SSH信息设置
set SshAddress=远程服务器IP
:: [ -- 自定义-- ] SSH账号
set SshUser=SSH账号
:: [ -- 自定义-- ] SSH端口
set SshPort=SSH端口,通常是 22
:: [ -- 自定义-- ] SSH证书 - 私钥路径
set SshKeyPath=C:\Users\自己电脑的用户名\.ssh\id_rsa:: [ -- 自定义-- ] REM 服务端的CD脚本路径 ↓↓↓ 远程服务器其它设置
set ServerCD=C:\web-release\MyMvcWeb\CD.bat
:: [ -- 自定义-- ] REM 服务端的临时发布包目录
set ServerTempPubPkgs=C:\web-release\temp-publish-pkgs:: ---------- 1. 自定义设置 finished ...:: ---------- 2.clear history start ...
%DriveLetterLocal%
cd %OutRoot%
echo clear history Start	...... 
echo %OutDir%
REM 清理掉Web发布包输出文件夹目录
rmdir /s /q %OutDir%
echo clear history Finished	...... :: ---------- 2.clear history finished ...:: ---------- 3. publish start ...REM 进入本地发布盘符
%DriveLetterLocal%if not exist %OutRoot% (mkdir %OutRoot%echo %OutRoot% created successfully.
) else (echo %OutRoot% already exists.
)if not exist %OutDir% (mkdir %OutDir%echo %OutDir% created successfully.
) else (echo %OutDir% already exists.
)echo publish Start	...... 
cd %SlnDir%
dotnet publish "%csproj%" --no-self-contained -c Release /p:EnvironmentName=%Env% -o %OutDir%
echo publish Finished	...... :: ---------- 3. publish project finished ...:: ---------- 4. delete *.pdb temp files & compress & Upload Publish Pkgs start ...REM 进入本地发布目录   	↓↓↓ delete *.pdb temp files
cd %OutDir%
:: 检查是否存在以 .pdb 为后缀的文仿
dir /B *.pdb > nul 2>&1
REM 当检测出需要处理的文件后进行处琿
if %errorlevel% equ 0 (
:: 存在仿.pdb 为后缀的文件,删除它们del /Q *.pdbecho delete all rar file success
) else (echo rar file not found
):: ↓↓↓ compress - 把发布的文件压缩
cd %OutDir%
echo compress Start	......
:: 设置要打包的研所包文件夹 OutDir 上边已经有变釿
"%zip7%" a -tzip "%PrjName%.7z" "%OutDir%" -mx9
echo compress Finished	.....:: ↓↓↓ Upload Publish Pkgs - 把压缩包上传到远程目录
:: 发送到服务端的临时发布包目录
scp "%OutDir%%PrjName%.7z" %SshUser%@%SshAddress%:%ServerTempPubPkgs%:: ---------- 4. delete *.pdb temp files & compress & Upload Publish Pkgs finished ...:: ---------- 时间统计输出 start
set CIEndTime=%time%
set CIEndTimeTxt=CI结束时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
call :ColorText 0a "%CIEndTimeTxt%"
echo.
call :ColorText 0a "CD执行开始"
echo.
:: ---------- 时间统计输出  end:: ---------- 5. execute server cd.bat start ...:: SSH 执行远程服务器的CD命令
echo execute cd.bat Start	......
ssh %SshUser%@%SshAddress%  -p %SshPort% -i "%SshKeyPath%" %ServerCD%
echo execute cd.bat End	......
:: ---------- 5. execute server cd.bat finished ...:: 打开发布的网站
start http://106.15.74.25:80:: 时间统计输出-----------------------------------------------------start-----------------------------------------------------
:: 这里更换编码格式为了改变字体颜色
chcp 936
set CDEndTime=%time%
set CDEndTimeTxt=CD结束时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
call :ColorText 0a "%CDEndTimeTxt%"
echo.
echo.
call :ColorText 0a "%StartTimeTxt%"
echo.
call :ColorText 0a "%CIEndTimeTxt%"
echo.
call :ColorText 0a "%CDEndTimeTxt%"
echo.
echo.set StartTimeH=%StartTime:~0,2%
set CIEndTimeH=%CIEndTime:~0,2%
set CDEndTimeH=%CDEndTime:~0,2%
set StartTimeM=%StartTime:~3,2%
set CIEndTimeM=%CIEndTime:~3,2%
set CDEndTimeM=%CDEndTime:~3,2%
set StartTimeS=%StartTime:~6,2%
set CIEndTimeS=%CIEndTime:~6,2%
set CDEndTimeS=%CDEndTime:~6,2%if %StartTimeH:~0,1%==0 set /a StartTimeH=%StartTimeH:~1,1%*1
if %CIEndTimeH:~0,1%==0 set /a CIEndTimeH=%CIEndTimeH:~1,1%*1
if %CDEndTimeH:~0,1%==0 set /a CDEndTimeH=%CDEndTimeH:~1,1%*1
if %StartTimeM:~0,1%==0 set /a StartTimeM=%StartTimeM:~1,1%*1
if %CIEndTimeM:~0,1%==0 set /a CIEndTimeM=%CIEndTimeM:~1,1%*1
if %CDEndTimeM:~0,1%==0 set /a CDEndTimeM=%CDEndTimeM:~1,1%*1
if %StartTimeS:~0,1%==0 set /a StartTimeS=%StartTimeS:~1,1%*1
if %CIEndTimeS:~0,1%==0 set /a CIEndTimeS=%CIEndTimeS:~1,1%*1
if %CDEndTimeS:~0,1%==0 set /a CDEndTimeS=%CDEndTimeS:~1,1%*1set /a StartTimeSecond=%StartTimeH%*3600+%StartTimeM%*60+%StartTimeS%  
set /a CIEndTimeSecond=%CIEndTimeH%*3600+%CIEndTimeM%*60+%CIEndTimeS%
set /a CDEndTimeSecond=%CDEndTimeH%*3600+%CDEndTimeM%*60+%CDEndTimeS%set /a StartTimeDiff=%CIEndTimeSecond%-%StartTimeSecond%
set /a CIEndTimeDiff=%CDEndTimeSecond%-%CIEndTimeSecond%
set /a CDEndTimeDiff=%CDEndTimeSecond%-%StartTimeSecond%set /a StartTimeDiffH=%StartTimeDiff%/3600
set /a CIEndTimeDiffH=%CIEndTimeDiff%/3600
set /a CDEndTimeDiffH=%CDEndTimeDiff%/3600set /a StartTimeDiffM=(%StartTimeDiff%-%StartTimeDiffH%*3600)/60  
set /a CIEndTimeDiffM=(%CIEndTimeDiff%-%CIEndTimeDiffH%*3600)/60  
set /a CDEndTimeDiffM=(%CDEndTimeDiff%-%CDEndTimeDiffH%*3600)/60  set /a StartTimeDiffS=%StartTimeDiff%-%StartTimeDiffH%*3600-%StartTimeDiffM%*60
set /a CIEndTimeDiffS=%CIEndTimeDiff%-%CIEndTimeDiffH%*3600-%CIEndTimeDiffM%*60
set /a CDEndTimeDiffS=%CDEndTimeDiff%-%CDEndTimeDiffH%*3600-%CDEndTimeDiffM%*60if %StartTimeDiffH% LSS 10 set StartTimeDiffH=0%StartTimeDiffH%
if %CIEndTimeDiffH% LSS 10 set CIEndTimeDiffH=0%CIEndTimeDiffH%
if %CDEndTimeDiffH% LSS 10 set CDEndTimeDiffH=0%CDEndTimeDiffH%
if %StartTimeDiffM% LSS 10 set StartTimeDiffM=0%StartTimeDiffM%
if %CIEndTimeDiffM% LSS 10 set CIEndTimeDiffM=0%CIEndTimeDiffM%
if %CDEndTimeDiffM% LSS 10 set CDEndTimeDiffM=0%CDEndTimeDiffM%
if %StartTimeDiffS% LSS 10 set StartTimeDiffS=0%StartTimeDiffS%
if %CIEndTimeDiffS% LSS 10 set CIEndTimeDiffS=0%CIEndTimeDiffS%
if %CDEndTimeDiffS% LSS 10 set CDEndTimeDiffS=0%CDEndTimeDiffS%call :ColorText 0a "CI耗时%StartTimeDiffH%时%StartTimeDiffM%分%StartTimeDiffS%秒"
echo.                                     
call :ColorText 0a "CD耗时%CIEndTimeDiffH%时%CIEndTimeDiffM%分%CIEndTimeDiffS%秒"
echo.                                     
call :ColorText 0a "总耗时%CDEndTimeDiffH%时%CDEndTimeDiffM%分%CDEndTimeDiffS%秒"
echo.
echo.:: 时间统计输出-----------------------------------------------------end-----------------------------------------------------if not %errorlevel%==0 goto fail
if %errorlevel%==0 goto success
:fail
call :ColorText 0c "执行失败,请检查"
pause
exit
:success
call :ColorText 0a "执行成功,当前窗口会在3秒钟自动关闭"
TIMEOUT /T 3:: 时间统计输出-----------------------------------------------------start-----------------------------------------------------
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
:: 时间统计输出-----------------------------------------------------end-----------------------------------------------------pause

CD.bat 参照(中文乱码时,文件要用GB2312 格式):

chcp 65001REM @echo off
REM SETLOCAL EnableDelayedExpansion::切换到当前目录
cd /d %~dp0
:: ------------------------------------------- 工具相关配置 
:: 7z安装目录
set zip7=C:\Program Files\7-Zip\7z.exe:: ------------------------------------------- 项目发布相关配置 
:: 项目名称 和 CI中的项目名称一致
set ProjectName=MyMvcWeb
:: IIS 部署目录
set IISWebSiteDir=%~dp0
:: Web 发布包目录
set PublishcPkgsDir=C:\web-release\temp-publish-pkgs:: ------------------------------------------- IIS相关配置 
:: Web站点名称
set WebSiteName="CICD-MyWebSite"
:: 站点端口
set WebSitePort="80":: Web应用程序池名称
set WebSitePoolName="CICD-MyWebSitePool"
:: 程序池版本
set WebSitePoolVersion=""
:: 是否开启32位
set Enable32BitAppOnWin64="false":: 获取应用程序池列表
C:\Windows\System32\inetsrv\appcmd.exe list apppool /apppool.name:%WebSitePoolName%
:: 如果不存在程序池就新建
IF ERRORLEVEL 0 (C:\Windows\System32\inetsrv\appcmd.exe add apppool /name:%WebSitePoolName% /managedRuntimeVersion:%WebSitePoolVersion% /Enable32BitAppOnWin64:%Enable32BitAppOnWin64%
):: 获取Web站点列表
C:\Windows\System32\inetsrv\appcmd.exe list site /site.name:%WebSiteName%
:: 如果不存在站点就新建
IF ERRORLEVEL 0 (C:\Windows\System32\inetsrv\appcmd.exe add site /name:%WebSiteName% /bindings:http/*:%WebSitePort%: /applicationDefaults.applicationPool:%WebSitePoolName% /physicalPath:%~dp0
):: 发布前  停止一下IIS站点
@echo stop WebSite start...
@C:\Windows\System32\inetsrv\appcmd.exe stop site %WebSiteName%
@echo stop WebSite finished...:: 停止应用程序池
@echo stop WebSite start...
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:%WebSitePoolName%
@echo stop WebSite finished... :: 等待几秒 确保所有文件都不被占用
echo 等待1秒,确保所有文件都不被占用 ...
timeout /t 1 /nobreak
echo 1秒已过,继续执行。:: 解压前,删除临时发布目录
rmdir /s /q "%PublishcPkgsDir%\%ProjectName%
::  用7z 解压文件到发布包临时目录,x 解压文件 -o指定解压目的地
"%zip7%" x -o"%PublishcPkgsDir%" "%PublishcPkgsDir%\%ProjectName%.7z"::  从发布包临时目录 Copy 发布文件到 IIS Web站点目录
xcopy "%PublishcPkgsDir%\%ProjectName%\*.*" "%IISWebSiteDir%" /s /e /y:: 启动应用程序池
@echo stop WebSite start...
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:%WebSitePoolName%
@echo stop WebSite finished...:: 启动IIS站点
@echo Restart WebSite start...
@C:\Windows\System32\inetsrv\appcmd.exe start site %WebSiteName%
@echo Restart WebSite finished...

相关文章:

Windows .NET8 实现 远程一键部署,几秒完成发布,提高效率 - CICD

1. 前言 场景 &#xff08;工作环境 一键部署 到 远端服务器 [阿里云]&#xff09; CICD 基本步骤回顾 https://blog.csdn.net/CsethCRM/article/details/141604638 2. 环境准备 服务器端IP&#xff1a;106.15.74.25&#xff08;阿里云服务器&#xff09; 客户端&#xff1…...

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…...

标准IO与系统IO

概念区别 标准IO&#xff1a;&#xff08;libc提供&#xff09; fopen fread fwrite 系统IO&#xff1a;&#xff08;linux系统提供&#xff09; open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO&#xff1a; 把数据从内存直接写到磁盘上 标准IO&#xff…...

【conda】Conda 环境迁移指南:如何更改 envs_dirs 和 pkgs_dirs 以及跨盘迁移

目录 迁移概述一、conda 配置文件1.1 安装 Conda 后的默认目录设置1.2 查看当前 .condarc 配置 二、更改 Conda 的 envs_dirs 和 pkgs_dirs 设置2.1 使用 conda config 命令Windows 和 Linux 系统 2.2 手动编辑 .condarc 文件Windows 系统Linux 系统 2.3 验证设置 三、迁移 Con…...

脏页写入磁盘的过程详解

脏页写入磁盘的过程 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了保证数据的一致性和持久性,数据库系统需要在适当的时候将脏页写入磁盘。了解脏页写入磁盘的过程对于理解数据库的内部工作机制和优化性能至关重要。 二、触发脏页写入的条件…...

数据结构——单链表实现和注释浅解

关于单链表的基础部分增删查改的实现和一点理解&#xff0c;写在注释里~ SList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNo…...

滑动窗口系列(同向双指针)/9.7

新的解题思路 一、三数之和的多种可能 给定一个整数数组 arr &#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 arr[i] arr[j] arr[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 109 7 的模。 输入&…...

C# 窗体中Control以及Invalidate,Update,Refresh三种重绘方法的区别

在 C# 中&#xff0c;Control 类是 Windows Forms 应用程序中所有控件的基类。它提供了控件的基本功能和属性&#xff0c;这些功能和属性被所有继承自 Control 类的子类所共享。这意味着 Control 类是构建 Windows Forms 应用程序中用户界面元素的基础。 以下是 Control 类的一…...

缓存类型以及读写策略

缓存&#xff08;Cache&#xff09;是一种高效的数据存储技术&#xff0c;旨在提高数据访问速度。 它将频繁访问或最近使用的数据临时存储在更快速但较小的存储介质&#xff08;如内存&#xff09;中&#xff0c;以减少从较慢的存储设备&#xff08;如硬盘或远程服务器&#x…...

自动驾驶---Motion Planning之轨迹拼接

1 背景 笔者在之前的专栏中已经详细讲解了自动驾驶Planning模块的内容&#xff1a;包括行车的Behavior Planning和Motion Planning&#xff0c;以及低速记忆泊车的Planning。 本篇博客主要聊一聊Motion Planning中轨迹拼接的相关内容。从网络上各大品牌的车主拍摄的智驾视频来看…...

没资料的屏幕怎么点亮?思路分享

这次尝试调通一个没资料的屏幕&#xff0c;型号是HYT13264&#xff0c;这个是淘宝上面的老王2.9元屏&#xff0c;成色很好但是长期库存没有资料和代码能点亮&#xff0c;仅仅只有一个引脚定义。这里我使用Arduino Nano作为控制器尝试点亮这个模块。 首先&#xff0c;已知别人找…...

通信工程学习:什么是FEC前向纠错

FEC&#xff1a;前向纠错 FEC&#xff08;Forward Error Correction&#xff0c;前向纠错&#xff09;是一种增加数据通信可信度的技术&#xff0c;广泛应用于计算机网络、无线通信、卫星通信等多种数据传输场景中。其基本原理和特点可以归纳如下&#xff1a; 一、FEC前向纠错…...

【机器人工具箱Robotics Toolbox开发笔记(二十)】机器人工具箱SerialLink I类函数参数说明

机器人工具箱中的SerialLink表示串联机器人型机器人的具体类。该类使用D-H参数描述,每个关节一组。SerialLink I类包含的参数如表1所示。 表1 SerialLink I类参数 参 数 意 义 参 数 意 义 plot 显示机器人的图形表示 jacobn 工具坐标系中的雅可比矩阵 plot3D 显示机…...

单调栈的实现

这是C算法基础-数据结构专栏的第二十四篇文章&#xff0c;专栏详情请见此处。 引入 单调栈就是满足单调性的栈结构&#xff0c;它最经典的应用就是给定一个序列&#xff0c;找出每个数左边离它最近的比它大/小的数。 下面我们就来讲单调栈的实现。 定义 单调栈就是满足单调性…...

ffmpeg的安装和使用教程

在Linux上安装和使用FFmpeg可以方便地完成音视频的编码、解码、转码等操作。以下是详细的安装和使用教程。 安装FFmpeg FFmpeg的安装方法会因为不同的Linux发行版有所不同。下面是几种常见的安装方法&#xff1a; Ubuntu/Debian 打开终端&#xff0c;更新包列表并安装FFmpe…...

从计组中从重温C中浮点数表示及C程序翻译过程

目录 移码​编辑 传统浮点表示格式 浮点数的存储&#xff08;ieee 754&#xff09;->修炼内功 例子&#xff1a; ​编辑 浮点数取的过程 C程序翻译过程 移码 传统浮点表示格式 浮点数的存储&#xff08;ieee 754&#xff09;->修炼内功 根据国际标准IEEE&#xff0…...

MySQL常用函数(总结)详细版

1. 字符串函数 CONCAT(str1, str2, ...)&#xff1a;将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); LENGTH(str)&#xff1a;返回字符串的长度&#xff08;字节数&#xff09;。 SELECT LENGTH(Hello); SUBSTRING(str, pos, len)&#xff1a;从字符串 …...

学习记录——day41 C++ 类的静态成员 static

静态成员&#xff0c;是类中不依赖于类对象而独立存在的成员变量&#xff0c;但仍然属于类&#xff0c;是成员的一种 静态成员的空间分配发生在出现编译阶段&#xff0c;不占用类的空间 静态成员分为&#xff0c;静态成员变量和静态成员函数 静态成员变量 1、相关概念 1&…...

JVM - Java内存区域

文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区…...

本地电脑交叉编译ffmpeg 到 windows on arm64

本地电脑交叉编译ffmpeg 到 windows on arm64 我这里有编译好的win on arm 的 ffmpeg : https://github.com/wmx-github/ffmpeg-wos-arm64-build 使用 llvm-mingw 工具链 https://github.com/mstorsjo/llvm-mingw/releases 前缀 aarch64-w64-mingw32- 这个库是ubuntu 交叉编译…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...