Redis的持久化机制
目录
RDB
触发机制
bgsave命令执行流程
RDB的文件处理
RDB的优缺点
AOF
AOF工作流程
AOF缓冲区同步文件策略
AOF重写机制
AOF重写触发机制
AOF重写流程
在这里我们知道,redis存储的数据是存储在缓存中的,重启服务器数据就不存在了。要想持久化存储我们这里就需要把数据存储在硬盘上。
Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。
RDB
RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和 自动触发。
RDB会定期把我们Redis内存中的数据,都写入硬盘中,生成一个快照,存储在硬盘中。
当我们重启Redis的时候,Redis就可以根据这个快照恢复到原来的内存中。
触发机制
(1)手动触发分别对应save和bgsave命令:
• save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例造成长时间 阻塞,基本不采用。
• bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动 结束。阻塞只发生在fork阶段,⼀般时间很短。
(2)自动触发(通过设置Redis的配置文件,让Redis每隔一段时间就触发)
1. 使用save配置。如 "save m n" 表 m 秒内数据集发生了 n 次修改,自动 RDB 持久化。
2. 从节点进行全量复制操作时,主节点自动进行 RDB 持久化,随后将 RDB 文件内容发送给从结点。
3. 执行 shutdown 命令关闭 Redis 时,执行 RDB 持久化。
bgsave命令执行流程
如图:
1. 执行bgsave命令,Redis父进程判断当前进是否存在其他正在执行的子进程,如 RDB/AOF 子进 程,如果存在 bgsave 命令直接返回。
2. 父进程执行fork创建子进程,fork过程中父进程会阻塞,通过info stats命令查看latest_fork_usec 选项,可以获取最近⼀次fork操作的耗时,单位为微秒。
3. 父进程 fork完成后,bgsave命令返回"Background saving started"信息并不再阻塞父进程,可以继续响应其他命令。
4. 子进程创建 RDB 文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。执行 lastsave 命令可以获取最后⼀次生成RDB的时间,对应info统计的rdb_last_save_time选项。
5. 进程发送信号给父进程表示完成,父进程更新统计信息。
RDB的文件处理
保存:RDB 文件保存再 dir 配置指定的目录(默认/var/lib/redis/)下,文件名通过dbfilename配置(默认dump.rdb)指定。可以通过执行config set dir {newDir} 和 config set dbfilename {newFilename}运行期间动态执行,当下次运行时 RDB 文件会保存到新目录。
压缩:Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后的文件远远小于内存大小,默认开启,可以通过参数config set rdbcompression{yes|no}动态修改。
虽然压缩RDB会消耗CPU,但可以大幅降低文件的体积,方便保存到硬盘或通过网络发送到从节点,因此建议开启。
RDB的优缺点
• RDB是⼀个紧凑压缩的⼆进制文件,代表Redis在某个时间点上的数据快照。非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份,并把RDB文件复制到远程机器或者文件系统中 (如hdfs)用于灾备。
• Redis加载RDB恢复数据远远快于AOF的方式。
• RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork创建子进 程,属于重量级操作,频繁执行成本过高。
• RDB文件使用特定⼆进制格式保存,Redis版本演进过程中有多个RDB版本,兼容性可能有风险。
AOF
AOF这里是记录用户的每一步的操作,把每一步的操作,都记录在文件中。
当redis重启的是时候,就会读取aof文件的内容,来恢复数据。
那么在这里我们启动redis服务的时候,是使用RDB还是AOF呢?
这里是AOF,AOF开启的时候,RDB就默认关闭了。
开启 AOF 功能需要设置配置:appendonly yes,默认不开启。AOF文件名通过appendfilename配置(默认是appendonly.aof)设置。保存目录同 RDB 持久化方式⼀致,通过dir配置指定。
AOF工作流程
如图:
1. 所有的写入命令会追加到 aof_buf(缓冲区)中。
2. AOF 缓冲区根据对应的策略向硬盘做同步操作。
3. 随着 AOF文件越来越大,需要定期对 AOF了,文件进行重写,达到压缩的目的。
4. 当 Redis 服务器启动时,可以加载 AOF文件进行数据恢复。
AOF过程中为什么需要 aof_buf 这个缓冲区?Redis 使用单线程响应命令,如果每次写 AOF文件都直接同步硬盘,性能从内存的读写变成IO读写,必然会下降。先写入缓冲区可以有效减少IO次数,同时,Redis还可以提供多种缓冲区同步策略,让用户根据自己的需求做出合理的平衡。
AOF缓冲区同步文件策略
如图:
• 配置为always时,每次写入都要同步AOF文件,性能很差,在⼀般的SATA硬盘上,只能支持大约几百TPS写⼊。除非是非常重要的数据,否则不建议配置。
• 配置为no时,由于操作系统同步策略不可控,虽然提高了性能,但数据丢失风险大增,除非数据 重要程度很低,一般不建议配置。
• 配置为everysec,是默认配置,也是推荐配置,兼顾了数据安全性和性能。理论上最多丢失1秒的数据。
系统调用write和fsync说明:
• write操作会触发延迟写(delayed write)机制。Linux在内核提供页缓冲区用来提供硬盘IO性 能。write操作在写入系统缓冲区后立即返回。同步硬盘操作依赖于系统调度机制,例如:缓冲区 页空间写满或达到特定时间周期。同步文件之前,如果此时系统故障宕机,缓冲区内数据将丢失。
• Fsync针对单个文件操作,做强制硬盘同步,fsync将阻塞直到数据写入到硬盘。
AOF重写机制
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入AOF重写机制压缩文件体积。AOF文件重写是把Redis进程内的数据转化为写命令同步到新的AOF文件。重写后的AOF为什么可以变小?有如下原因:
• 进程内已超时的数据不再写入文件。
• 旧的AOF中的无效命令,例如del、hdel、srem等重写后将会删除,只需要保留数据的最终版 本。
• 多条写操作合并为⼀条,例如lpush list a、lpush list b、lpush list 从可以合并为lpush list a b c。
AOF重写触发机制
• 手动触发:调用bgrewriteaof命令。
• 自动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机。
(1)auto-aof-rewrite-min-size:表示触发重写时AOF的最小文件大小,默认为64MB。
(2)auto-aof-rewrite-percentage:代表当前AOF占用大小相比较上次重写时增加的比例。
AOF重写流程
如图:
1. 执行AOF重写请求。如果当前进程正在执行AOF重写,请求不执行。如果当前进程正在执行bgsave操作,重写命令延迟到bgsave完成之后再执行。
2. 父进程执行fork创建子进程。
3. 重写
(1)主进程fork之后,继续响应其他命令。所有修改操作写入AOF缓冲区并根据appendfsync策 略同步到硬盘,保证旧AOF文件机制正确。
b. 子进程只有fork之前的所有内存信息,父进程中需要将fork之后这段时间的修改操作写入 AOF重写缓冲区中。
4. 子进程根据内存快照,将命令合并到新的AOF文件中。
5. 子进程完成重写
(1) 新文件写入后,子进程发送信号给父进程。
(2)父进程把AOF重写缓冲区内临时保存的命令追加到新AOF文件中。
(3)用新AOF文件替换老AOF文件。
相关文章:
Redis的持久化机制
目录 RDB 触发机制 bgsave命令执行流程 RDB的文件处理 RDB的优缺点 AOF AOF工作流程 AOF缓冲区同步文件策略 AOF重写机制 AOF重写触发机制 AOF重写流程 在这里我们知道,redis存储的数据是存储在缓存中的,重启服务器数据就不存在了。要想持久化…...
LeetCode 83 :删除排链表中的重复元素
题目: 地址:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 方法一: 方法二: package com.zy.leetcode.LeetCode_04;/*** Author: zy* Date: 2024-12-25-15:19* Description: 删除排链表中的里复元素* …...
复习打卡大数据篇——Hadoop MapReduce
目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。 MapRed…...
无法验证服务器身份是什么意思?
当你尝试访问某个网站或连接到服务器时,系统突然弹出一个提示,告诉你“无法验证服务器身份”?这到底是什么意思?在如今这个网络安全日益重要的时代,了解这种提示的含义以及背后的原因是非常必要的。今天,我们就来了解一下“无法…...
用友-友数聚科技CPAS审计管理系统V4 getCurserIfAllowLogin存在SQL注入漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
Java 深拷贝全面解析
1. 引言 在 Java 编程中,对象之间的复制是一个常见的需求。根据复制的深度不同,我们可以将复制分为浅拷贝和深拷贝。本文将深入探讨 深拷贝(Deep Copy) 的概念、应用场景、具体实现方法及其优缺点,并提供一些实用的建…...
极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
云原生架构中的中间件容器化:优劣势与实践探索
在云原生架构逐步推进的过程中,许多企业已经开始将应用和服务容器化,以充分利用云计算带来的弹性和自动化。随着容器技术的发展,容器化不仅仅限于应用层,越来越多的中间件也被考虑纳入容器化范畴,包括Redis、Kafka、Ra…...
Go+chromedp实现Web UI自动化测试
1.为什么使用go进行UI自动化测试? 速度:Go速度很快,这在运行包含数百个UI测试的测试套件时是一个巨大的优势 并发性:可以利用Go的内置并发性(goroutines)来并行化测试执行 简单:Go的简约语法允许您编写可读且可维护…...
Adversarial Machine Learning(对抗机器学习)
之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…...
EleutherAI/pythia-70m
EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…...
【C#】C#打印当前时间以及TimeSpan()介绍
1. C#打印当前时间 string currentDate DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");Console.WriteLine(currentDate);2. TimeSpan()介绍 TimeSpan(long ticks)的单位是100ns //500ms new TimeSpan(10*1000*500);参考: C#-TimeSpan-计算时间差...
典型常见的基于知识蒸馏的目标检测方法总结二
来源:https://github.com/LutingWang/awesome-knowledge-distillation-for-object-detection收录的方法 NeurIPS 2017:Learning Efficient Object Detection Models with Knowledge Distillation CVPR 2017:Mimicking Very Efficient Networ…...
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
前言: 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖…...
C# OpenCV机器视觉:凸包检测
在一个看似平常却又暗藏玄机的午后,阿强正悠闲地坐在实验室里,翘着二郎腿,哼着小曲儿,美滋滋地品尝着手中那杯热气腾腾的咖啡,仿佛整个世界都与他无关。突然,实验室的门 “砰” 的一声被撞开,小…...
yii2 手动添加 phpoffice\phpexcel
1.下载地址:https://github.com/PHPOffice/PHPExcel 2.解压并修改文件名为phpexcel 在yii项目的vendor目录下创建一个文件夹命名为phpoffice 把phpexcel目录放到phpoffic文件夹下 查看vendor\phpoffice\phpexcel目录下会看到这些文件 3.到vendor\composer目录下…...
Apifox 12月更新|接口的测试覆盖情况、测试场景支持修改记录、迭代分支能力升级、自定义项目角色权限、接口可评论
Apifox 新版本上线啦!!! 在快速迭代的开发流程中,接口测试工具的强大功能往往决定了项目的效率和质量。而 Apifox 在 12 月的更新中,再次引领潮流,推出了一系列重磅功能!测试覆盖情况分析、场景…...
“库存管理软件的用户体验”:界面与交互设计
3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该库存管理软件所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同…...
Mysql大数据量表分页查询性能优化
一、模拟场景 1、产品表t_product,数据量500万+ 2、未做任何优化前,cout查询时间大约4秒;LIMIT offset, count 时,offset 值较大时查询时间越久。 count查询 SELECT COUNT(*) AS total FROM t_product WHERE deleted = 0 AND tenant_id = 1 分页查询 SELECT * FROM t_…...
Linux基础--1.1 什么是 Linux 操作系统
Linux 的起源与定义 Linux 是一种开源的操作系统,由 Linus Torvalds 于 1991 年首次发布。它基于 UNIX 操作系统,并以自由和开放为核心理念。Linux 的代码可以由任何人查看、修改并发布,这是它与许多专有操作系统(如 Windows 和 …...
数电实验期末作业——基于FPGA的数字时钟设计
1. 概述 本系统主要完成数字电子钟的以下功能: 1.计时功能(24小时) 2.闹钟功能(设置闹钟以及到时播放音乐) 3.校时功能 4.其他简单功能(清零、输入频率选择(1hz、500hz、5khz)、…...
hdfs命令(三)- hdfs 管理命令(三)- hdfs dfsadmin命令
文章目录 前言一、hdfs分布式文件系统管理命令1. 介绍2. 语法及解释3. 命令3.1 生成HDFS集群的状态报告3.1.1 语法及解释3.1.2 示例 3.2 重新加载配置文件并更新NameNode中的节点列表3.3 刷新指定DataNode上的NameNode信息3.3.1 语法 3.4 获取并显示指定DataNode的信息3.4.1 语…...
TCP off-path exploits(又一个弄巧成拙的例子)
承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前&…...
Docker【初识Docker】
目录 为什么会出现Docker这门技术喃? 应用开发和部署的困境 容器技术的先兆 Docker 的出现:简化容器化 Docker 技术的关键创新: Docker 的广泛应用和变革 什么是 Docker? Docker的历史 早期背景:容器化和虚拟化…...
开机存活脚本
vim datastadard_alive.sh #!/bin/bashPORT18086 # 替换为你想要检查的端口号 dt$(date %Y-%m-%d)# 使用netstat检查端口是否存在 if netstat -tuln | grep -q ":$PORT"; thenecho "$dt Port $PORT is in use" > /opt/datastadard/logs/alive.log# 如…...
【elementplus】中文模式
设置中文 <el-date-picker v-model“userAddKey” type“daterange” style“width: 240px” start-placeholder“Start Date” end-placeholder“End Date” change“handleUserAddChange” /> 引入: import zhCn from “element-plus/es/locale/lang/zh-cn”…...
【Docker命令】如何使用`docker exec`在容器内执行命令
大家好,今天我们来聊聊Docker容器管理中的一个非常有用的命令:docker exec。在日常工作中,我们经常需要在运行中的Docker容器内执行各种命令,docker exec正是帮助我们实现这一需求的利器。下面我将通过一个简单的例子,…...
FPGA的DMA应用——pcileech
硬件通过pcie总线,访存本机的内存,并进行修改,可以进行很多操作。 学习视频:乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址:AMD-Xilinx Vivado™ 2024.1 现…...
前后端数据交互
一、后端部分 1.创建Spring Boot项目:在IDEA中创建一个Spring Boot项目,引入必要的依赖。 2.编写Controller层:在Spring Boot项目中创建Controller,用于处理前端的请求和响应数据。 RestController RequestMapping("/demo/s…...
将现有Web 网页封装为macOS应用
文章目录 方式一:Unite for macOS方式二:Web2Desk方式三:Nativefier方式四:Flutter Flutter WebView Plugin总结 方式一:Unite for macOS Unite 是一款专为 macOS 设计的工具,可以将任意 Web 页面快速封装…...
代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。
1.孤岛的总面积 卡码网:101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格…...
Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...
逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略
困厄铸剑心,逆袭展锋芒。 寒苦凝壮志,腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 (一)网络请求与响应 (二)网页解析 (三)爬行策略 三、网络爬虫的应用领…...
【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容,就像使用..语法启动文件系统路径。例如ÿ…...
wangEditor富文本插件在vue项目中使用和媒体上传的实现
wangEditor是前端一个比较流行的简洁易用,功能强大的前端富文本编辑器,支持 JS Vue React,提供了很多丰富的功能,下面手把手教你实现wangWditor富文本插件在vue项目中配置,保存、图片上传等功能。无脑ctrlc即可 基本功…...
FFmpeg 的常用API
FFmpeg 的常用API 附录:FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能,多种多媒体封装格式&…...
【软件】教务系统成绩提交工具使用步骤
【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...
es快速扫描
介绍 Elasticsearch简称es,一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群,处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊…...
埃斯顿机器人程序模版案例,欢迎指点
埃斯顿机器人程序模版案例,欢迎指点...
解锁成长密码:探寻刻意练习之道
刻意练习,真有那么神? 在生活中,你是否有过这样的困惑:每天苦练英语口语,可一到交流时还是支支吾吾;埋头苦学吉他,却总是卡在几个和弦转换上;工作多年,业务能力却似乎陷入…...
对外发PDF设置打开次数
在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…...
【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别
su 命令 su (Switch User 切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用…...
leetcode hot 100搜索回溯
39. 组合总和 已解答 中等 相关标签 相关企业 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candi…...
记录-->为2025添砖java的第二天
如何在java中创建自己的方法呢,我认为它和在C语言c里面写函数就没啥区别,(⊙﹏⊙),可能有一点点就是说public static int add(int a,int b){}就是得和main方法里面的状态一致。 import java.util.Scanner; public class Math3 {public stati…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
拼多多纠偏,能否实现买卖平权?
科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求,有意优化营商环境,作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后,拼多多近期被传正在内测精选用户…...
【Leetcode】3159. 查询数组中元素的出现位置
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i] ,你需要找到 n u m s nums nu…...
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...
Element-plus自动导入
安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…...
贪心算法(常见贪心模型)
常见贪心模型 简单排序模型 最小化战斗力差距 题目分析: #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...