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

Redis持久化(RDB/AOF)

"在哪里走散,你都会 找 到 我。" 


认识持久化

        我们在接触Mysql事务的时候,一定了解过Mysql事务的四个特性:
        "原子性(A)一致性(C)隔离性(I)持久性(D)"

        而其中持久性其实与持久化是一回事,所谓持久与不持久,针对的是数据。如果将该数据存储在磁盘上,那么数据就具有持久性,反之如果数据仅仅存在于内存上,就不具有持久性。

redis持久化:

        对于Redis而言,是一个内存数据库,操作的数据大都是内存级别的(Redis相比于Mysql明显优势和 特点)。但在内存存储数据是不持久的,一旦断电内存中的数据就会被清空,要想持有持久化的特性,数据必须存储在磁盘上。

        所以,既要保证速度快,那么数据的操作一定还是在内存,但如果要保证持久化,数据还是得想办法存储在磁盘上。Redis决定全都要!

        可是内存与硬盘上存储的数据只是存在理论上的一致性,实际中可能存在一定的偏差,这同我们选择的 "持久化策略" 是息息相关的。 

内存 or 硬盘?

        也许你就会有疑问,如果此时要想redis插入或者获取一个数据,是在内存、是硬盘上操作呢?

         当要插入一个数据时,就需要把这个数据同时写入内存、硬盘之中的!但说是这样说,何时写入硬盘,效率咋样,都是同我们选择的策略有关的。

        如果是要查询一个数据,直接选择从内存中读取即可。硬盘数据仅仅是在redis进入重启时,用来恢复原来内存中数据的。  


Redis持久化策略

        严格来说redis中的持久化策略有两种:

● RDB -- Redis DataBase

● AOF -- Append Only File

        其中你可以把RDB策略理解为一种"定期备份",它一定带来的一个问题是实际内存值与备份值可能存在偏差。AOF策略可以理解为一种“实时备份”。

(1) RDB简介

        RDB持久化就是将当前进程中的数据,定期写入到磁盘中,生成所谓的“快照”,也是Redis默认的持久化机制。

触发方式:        

● 手动触发        

        程序猿通过redis客户端执行特定的命令,触发生成快照。

save: 执行save命令时,会导致redis全力以赴生成“快照”,因为redis采用的是单线程模型,此时就会阻塞redis处理其他客户端的命令。(出现类似keys*的后果,一般不建议使用save)。

bgsave: 不会影响redis处理其他客户端的命令。但,redis咋做到不需要多线程完成并发编程的?答案是这里使用的是多进程模型,来处理并发编程。

● 自动触发  

        在Redis配置文件中设置了让Redis,每隔多长时间生成\每产生多少次修改,就会触发生成快照。

RDB文件

        redis的配置文件通常会在/etc目录下的redis.conf文件。        

        我们打开redis.conf文件后,可以找到redis生成的rdb文件是存放在redis的工作目录中的,这个是可以在redis中进行配置的。 

        我们进入这个路径就可以看到这文件名为 "dump.rdb"的文件。        

        当我们打开这个文件时,我们会发现是一堆乱码。        

        dump.rdb本质是一个二进制文件,是将内存中的数据,以压缩的形式保存在这个二进制文件之中的。我们一定不要拿着vim,将把这个rdb文件里的内容进行乱改。因为redis每次重启都会尝试加载这个rdb文件,如果发现这个文件格式是错误的,数据加载也会出现错误。        

        当然,我们认为不去修改并不是唯一可能导致rdb文件出现损坏的情况,当把rdb文件进行网络传输,仍然可能造成内容缺失,引起文件破坏,此时可能导致redis服务器无法启动。        

        redis还提供了rdb文件检查工具~                                

RDB触发流程        

        当执行生成rdb文件镜像时,此时会先将要生成的快照数据保存在一个临时文件之中。当这个快照生成完毕后,会删除之前的rdb文件,并把这个临时文件重命名为dump.rdb,因此从始至终都只有一份rdb文件。        

 

rdb触发时机      

        rdb文件的数据,不会根据你简简单单插入一些数据就会发生更改。其原因就在于没有触发RDB机制。

自动触发:      

        在前些段落提到过rdb有两种触发机制,分别是自动和手动触发。自动触发机制主要是在配置文件中,需要去手动进行修改。        

        当然,这些值不能设置得过小,导致频繁触发生产快照,而每一次快照生成的成本也不是可以忽略的。正因为不能频繁生成快照,所以rdb文件里的数据与实时数据可能会存在偏差。

        甚至,如果redis服务器直接挂掉(例如使用kill命令等)。会导致在上一个快照版本,与服务器崩掉前期间的数据都丢掉了!这不是rdb能够解决的问题。

 
手动触发:

        手动执行命令save\bgsave,因为咱们的数据量是很少的,所以一旦执行这两个命令中的其中一个都会很快的产生结果。感受子进程创建的过程,对我们来说比较奢望,但是检查生成的新文件,对我们而言却十分容易。

        Linux文件系统是基于ext4的组织方式,将文件系统分为三大组成部分:
▪ 超级块:放的是一些管理内容。

▪ inode区: 存放inode节点,每一个文件都有唯一的inode数据结构进行对应。

▪ block区:存放文件的数据内容。

        所以,判断一个文件是否被替换,就检查它的inode即可。        

 

RDB的优缺点

• RDB是⼀个紧凑压缩的⼆进制⽂件,代表Redis在某个时间点上的数据快照。

• Redis加载RDB恢复数据远远快于AOF的⽅式。RDB使用二进制的方式来组织数据,直接把数据读取到内存中来,按照字节格式取出来即可。但是AOF是用文本方式来组织数据,需要一系列的字符串切分操作。

• RDB⽅式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运⾏都要执⾏fork创建⼦进程,属于重量级操作,频繁执⾏成本过⾼。

• RDB⽂件使⽤特定⼆进制格式保存,Redis版本演进过程中有多个RDB版本,兼容性可能有⻛
险。

        当然RDB最大的问题还是在于,无法实时持久化保存数据,在两次快照之间,如果服务器出现差错,数据会出现丢失。

(2) AOF简介

        AOF(AppendOnlyFile)持久化:以独⽴⽇志的⽅式记录每次写的命令,重启时再重新执⾏AOF⽂件中的命令达到恢复数据的⽬的。        

        “AOF的主要作⽤是解决了RDB数据无法持久化的问题”。

使用AOF

        因为redis默认使用将RDB作为默认的持久化机制,开启AOF功能需要设置配置:

        该appendonly.aof文件同rdb文件一样,存在于工作目录。

AOF文件        

        AOF本质上是一个文本文件,可以类似于Mysql中的binlog,记录用户的一系列操作。其中会用到一些特殊符号作为分隔符。

        

AOF触发流程

▪ 手动触发:

        调⽤bgrewriteaof命令

▪ 自动触发:

        根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定⾃动触发时
机。

auto-aof-rewrite-percentage:代表当前AOF占⽤⼤⼩相⽐较上次重写时增加的⽐例.

auto-aof-rewrite-min-size:表⽰触发重写时AOF的最⼩⽂件⼤⼩,默认为64MB.

AOF介入

        对于RDB而言,生成的快照只是对当前内存中数据的一份镜像,它一定存在数据不具有实时性的问题。由此,引入AOF后,既需要对内存进行写入,又需要对磁盘进行写入,才能保证数据的实时性。这会产生一个问题:

AOF策略是否会严重影响到Redis处理请求的速度?

        答案是否定的!

        AOF的工作机制并非把工作线程的数据直接就写在磁盘上,而是会在内存中开辟空间,用作缓冲区,在积累了一波后,才会向硬盘统一写入这一份数据。     

        硬盘内容的读取是根据磁头寻址的方式,如果内容数据是随机地址,那么查询花费的时间是很高的,效率也是低下的。相反,如果是顺序写入,磁头的读取效率是比随机读取要高很多的(虽然仍比不过内存的读取速度)。

        AOF是把每次新的操作写入到原文件的末尾,这是顺序写入。        

AOF策略

        将数据写入在内存开辟的缓冲区中,其数据存储还是在内存中的,一旦断电、或者崩溃这些数据还是会发生丢失!这是不可避免的!

        redis为程序猿给出了一些选项,也就是一些刷新策略(缓冲区)。

        

可配置项说明
always命令写入aof_buf后,调用fsync同步,完成后返回
everysec命令写入aof_buf后,只执行write操作,不进行fsync。由同步线程每秒进行fsync
no命令只执行aof_buf,由OS控制fsync频率

        我们谈到访问外设速率,并不强调访问或读取速度,而是次数。

▪ 当刷新频率越高,对性能影响越大,同时数据的可靠性越高。

▪ 当刷新频率越低,对性能影响越小,同时数据的可靠性越低。

AOF重写机制

        随着命令不断写⼊AOF,⽂件会越来越⼤。

        较⼩的AOF⽂件⼀⽅⾯降低了硬盘空间占⽤,⼀⽅⾯可以提升启动Redis时数据恢复的速度。

AOF重写流程                              

● 如果当前进程正在执⾏AOF重写,又接收到AOF请求直接返回。如果是当前进程正在执⾏bgsave(RDB)操作,重写命令延迟到bgsave完成之后再执⾏。

● ⽗进程执⾏fork创建⼦进程。

● 重写

        1.主进程fork之后,继续响应其他命令。所有修改操作写⼊AOF缓冲区并据appendfsync策略同步到硬盘,保证旧AOF⽂件机制正确。 如果重写中断,能够恢复出原数据。

        2.⼦进程只有fork之前的所有内存信息,⽗进程中需要将fork之后这段时间的修改操作写⼊
AOF重写缓冲区中。从而保证数据的实时性。

● ⼦进程根据内存快照,将命令合并到新的AOF⽂件中。

● ⼦进程完成重写

        1.新⽂件写⼊后,⼦进程发送信号给⽗进程。

        2.⽗进程把AOF重写缓冲区内临时保存的命令追加到新AOF⽂件中。

        3. ⽤新AOF⽂件替换⽼AOF⽂件。

(3) 混合持久化

        顾名思义,混合持久化要做的既是要保证实时性,又得保证效率。结合aof和rdb的特点。

        按照aof的方式,对每一个请求、操作都记录到文件里,触发aof重写后,就会把内存的当前状态形成快照,按照rdb的存储格式写入到aof新文件里。后续再进行操作,会按照aof文本的方式追加到文件后面。

 


 

AOF vs RDB

        当redis启动时,会根据aof或者rdb文件进行数据恢复。但,如果两者文件都存在,那么redis会如何选择呢?             

        rdb对于fork之前的数据会进行备份,但对于fork之后的数据则会置之不理,不会关心之后的任何数据。而对于aof,关心fork之前的数据意外,还能通过aof_rewrite_buf换从化区获取fork之后新数据。

        rdb本身的设计理念是“定期备份”,而aof设计的理念在于“实时备份”。


● RDB视为内存的快照,产⽣的内容更为紧凑,占⽤空间较⼩,恢复时速度更快。但产⽣RDB的开销较⼤,不适合进⾏实时持久化,⼀般⽤于冷备和主从复制。

● AOF视为对修改命令保存,在恢复时需要重放命令,持久性安全性高。并且有重写机制来定期压缩AOF⽂件。但其加载速度是不及RDB的。

● RDB和AOF都使⽤fork创建⼦进程,利⽤Linux⼦进程拥有⽗进程内存快照的特点进⾏持久化,尽可能不影响主进程继续处理后续命令。
 


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~


        

相关文章:

Redis持久化(RDB/AOF)

"在哪里走散,你都会 找 到 我。" 认识持久化 我们在接触Mysql事务的时候,一定了解过Mysql事务的四个特性: "原子性(A)一致性(C)隔离性(I)持久性(D)" 而其中持久性其实与持久化是一回事,所谓持久与不持久&#x…...

小谈设计模式(15)—观察者模式

小谈设计模式(15)—观察者模式 专栏介绍专栏地址专栏介绍 观察者模式核心思想主要角色Subject(被观察者)ConcreteSubject(具体被观察者)Observer(观察者)ConcreteObserver&#xff0…...

简单工厂模式 创建型模式(非GoF经典设计模式)

简单工厂模式是属于创建型模式,也因为工厂中的方法一般设置为静态,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工…...

PE文件之导入表

1. 导入表 2. 显示导入表信息的例子 ; 作用: 将RVA地址转成FOA即文件偏移 ; 参数: _pFileHdr 指向读到内存中文件的基址指针 ; _dwRVA 目标RVA地址 ; 返回: 目标RVA转成文件偏移的值 RVA2FOA PROC USES esi edi edx, _pFileHdr:PTR BYTE, _dwRVA:DWORDmov esi, _pFil…...

二、码制及其转换

原码 根据我们所学可知,数字电路的逻辑电路是通过输出0和1来表示二进制数的,那么这个二进制数的正负又该怎么表示呢? 答案是在这个二进制数的最高位作为符号位来表示正负性,用0正数,用1表示负数,在这种表达…...

在pycharm中出现下载软件包失败的解决方法

一. 一般情况下我们会选择在设置中下载软件包,过程如下. 1. 直接点击左上角的文件, 再点击设置, 再点击项目, 在右边选择python解释器,点击号,输入要下载的软件包, 在下面的一系列的包中选择相对应的包,点击安装就可以了,有的时候我们下载的是最新的版本,如果要下载固定的版本…...

10.0 探索API调试事件原理

本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者…...

文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题

二、用go语言,说明如何在一个数组 A[1…n]中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者都不会发生上溢。要求 PUSH 和 POP 操作的运行时间为 O(1)。 文心一言: 在这个问题中,我们要在一个数组 A[1…n] 中…...

检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)

VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…...

vtk 动画入门 1 代码

实现效果如图&#xff1a; #include <vtkAutoInit.h> //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); //VTK_MODULE_INIT(vtkRenderingFreeType); #in…...

【VR】【unity】如何在VR中实现远程投屏功能?

【背景】 目前主流的VD应用,用于娱乐很棒,但是用于工作还是无法效率地操作键鼠。用虚拟键盘工作则显然是不现实的。为了让自己的头显能够起到小面积代替多显示屏的作用,自己动手开发投屏VR应用。 【思路】 先实现C#的投屏应用。研究如何将C#投屏应用用Unity 3D项目转写。…...

OpenGl材质

在现实世界里,每个物体会对光产生不同的反应。比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter),因而产生较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的…...

背包问题

目录 开端 01背包问题 AcWing 01背包问题 Luogu P2925干草出售 Luogu P1048采药 完全背包问题 AcWing 完全背包问题 Luogu P1853投资的最大效益 多重背包问题 AcWing 多重背包问题 I AcWing 多重背包问题 II Luogu P1776宝物筛选 混合背包问题 AcWing 混合背包问题…...

JavaSE | 初始Java(十一) | 抽象类和抽象接口

抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c; 如果 一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类 在 Java 中&#xff0c;一个…...

产品经理如何科学的进行需求调研?

导语&#xff1a;作为产品经理&#xff0c;需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求&#xff0c;还能指导产品设计和功能开发&#xff0c;提升产品的竞争力。本文将介绍几种科学的方法和技巧&#xff0c;帮助产品经…...

AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…...

玩具玩偶配送经营商城小程序的作用是什么?

玩具玩偶是小孩子们喜欢的产品&#xff0c;其市场需求度很高&#xff0c;以前玩具店里总是不缺乏客户&#xff0c;但现在随着人们生活品牌提升及消费形式改变&#xff0c;无论玩具厂商还是门店经销商都面对着不少痛点&#xff1a; 如拓客引流难、线上销售经营难、营销难、分销…...

latex表格内容换行

问题描述&#xff1a; 在用latex表格中编写公式时&#xff0c;可能出现公式太长&#xff0c;表格中后面的内容不能在文档中呈现&#xff0c;如下图1&#xff0c;故要进行行内内容的换行&#xff0c;使内容呈现完全而传统的\换行后,换行内容会顶格&#xff0c;如图2。 解决方…...

2023 牛客国庆day4 【10.2训练补题】

目录 B-Basic Gcd Problem&#xff08;素数筛快速幂&#xff09; H-Harder Gcd Problem&#xff08;素数&#xff09; B-Basic Gcd Problem&#xff08;素数筛快速幂&#xff09; 打表找规律发现答案为 (n质因子数目)^c #include<bits/stdc.h> using namespace std;…...

android的USB开发时 mUsbManager.getDeviceList()获取都为空

类提供的主要方法有&#xff1a; getDeviceList() 获得设备列表&#xff0c;返回的是一个HashMap.;hasPermission(UsbDevice device) 判断你的应用程序是否有接入此USB设备的权限&#xff0c;如果有则返回真&#xff0c;否则返回false.openDevice(UsbDevice device) 打开USB设…...

SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包&#xff0c;解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…...

Java基础面试,接口和抽象类的区别?

接口和抽象类的区别&#xff1f; 抽象类可以存在普通成员函数&#xff0c;而接口中只能存在public abstract 方法。抽象类中的成员变量可以是各种类型的&#xff0c;而接口中的成员变量只能是public static final类型的.抽象类只能继承一个&#xff0c;接口可以实现多个。 接…...

《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】

P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…...

【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记

0. 内容 T1. 参考SLAM14讲P247直接可写&#xff0c;注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1​,ξ2​之间有约束&#xff08;关系&#xff09;。 套用舒尔补公式&#xff1a; marg掉 ξ 1 \xi_1 ξ1​之后&#xff0c;信息被传递到 L 1 和 L 2 L_1和L_2 L1​和L2​之间了。 T2....

mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印

动态加载dll库 h文件中添加 #include "mydll.h" #ifdef UNICODE //区分字符集 #define LoadLibrary LoadLibraryW #else #define LoadLibrary LoadLibraryA #endif // !UNICODEtypedef double(*mydllPtr)(int, int);类内添加&#xff1a; mydllPtr m_mydll; cpp…...

索尼 toio™应用创意开发征文|检测工业平台震动

虽然索尼toio Q宝机器人主要是为儿童教育娱乐开发的&#xff0c;但我认为它在工业等领域也有一定应用潜力。例如&#xff0c;工业领域经常会有某些平面在实际作业中持续震动&#xff0c;导致零件过疲劳、平台失去稳定等问题。而这样的平台往往位于机器内部&#xff0c;从外部很…...

【已解决】 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘.

问题描述 团队都是用mac&#xff0c;只有我自己是windows&#xff0c;启动项目一直报错 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘. 但我不能因为自己的问题去改团队配置&#xff0c;也尝试过该vscode配置默认是LF还是报错 思路 看文章vscode如何替换所有文件的…...

Java8 Lambda.stream.sorted() 方法使用浅析分享

文章目录 Java8 Lambda.stream.sorted() 方法使用浅析分享sorted() 重载方法一升序降序 sorted() 重载方法二升序降序多字段排序 mock代码 Java8 Lambda.stream.sorted() 方法使用浅析分享 本文主要分享运用 Java8 中的 Lambda.stream.sorted方法排序的使用&#xff01; sorted…...

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要&#xff1a; 在采集指纹图像数据库后&#xff0c;设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时&#xff0c;算法输出两个图像来自同一手指的概率估计值。在一个实验中&#xff0c;神经网络使用几百对图像进行训练&…...

ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯

人工智能AI科技企业OpenAI公司25日宣布&#xff0c;其聊天应用程序ChatGPT如今具备「看、听、说」能力&#xff0c;至少能够理解口语、用合成语音回应并且处理图像&#xff1b;但专家忧心&#xff0c;以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…...

哪做网站/百度推广登录平台官网

程序分目录管理 szz_aip&#xff1a;工程目录bin&#xff1a;可执行文件 start.pyconfig&#xff1a;配置文件 setting.pylib&#xff1a;工具类、初始化服务类、接口类 interface.py 接口 tools.py 工具logs&#xff1a;日志readme.txt&#xff1a;说明 setting.p…...

怎样免费给自己的公司做网站/苏州网站建设公司

Java进程使用的虚拟内存确实比Java Heap要大很多。JVM包括很多子系统&#xff1a;垃圾收集器、类加载系统、JIT编译器等等&#xff0c;这些子系统各自都需要一定数量的RAM才能正常工作。当一个Java进程运行时&#xff0c;也不仅仅是JVM在消耗RAM&#xff0c;很多本地库&#xf…...

2b2网站开发/百度移动端优化

sery 的BLOG链接:http://sery.blog.ccidnet.com/blog/ccid/do_showone/tid_35445.html来自 “ ITPUB博客 ” &#xff0c;链接&#xff1a;http://blog.itpub.net/39335/viewspace-350917/&#xff0c;如需转载&#xff0c;请注明出处&#xff0c;否则将追究法律责任。 转载于…...

广州做网站怎么样/seo成功案例分析

STL 故名思意标准模板库&#xff08;Standard Template Library&#xff09; #include <bits/stdc.h> //万能头文件常见使用方式&#xff1a; pair pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。&#xff08;…...

终身免费网站建设/网络营销的营销理念

切片 概述 切片是程序员对数组对象的抽象&#xff0c;在Go里面&#xff0c;数组长度是不可变的&#xff0c;这样会造成我们使用集合的时候比较笨重&#xff0c;只有在固定的场所才可以使用。 Go提供了一种较为灵活的数组&#xff0c;我们可以理解为动态数组&#xff0c;他对比…...

做网站工资多少/seo人员的职责

$.ajax({ //以下属性值均为可选 type: "POST", //默认值: "GET")。请求方式 ("POST" 或 "GET")&#xff0c; 默认为 "GET"。注意&#xff1a;其它 HTTP 请求方法&#xff0c;如 PUT 和 DELETE 也可以使用&#xff0c;但仅部…...