@@ -9208,11 +9208,11 @@ bgsave指令工作原理:
92089208
92099209
92109210
9211- 流程:当执行 bgsave 的时候,客户端发出 bgsave 指令给到 redis 服务器,服务器返回后台已经开始执行的信息给客户端,同时使用 fork函数 创建一个子进程,让这个子进程去执行save相关的操作,创建RDB文件保存起来 ,操作完以后把结果返回。
9211+ 流程:当执行 bgsave 的时候,客户端发出 bgsave 指令给到 redis 服务器,服务器返回后台已经开始执行的信息给客户端,同时使用 fork函数创建一个子进程,让子进程去执行 save 相关的操作,创建 RDB 文件保存起来 ,操作完以后把结果返回。
92129212
9213- bgsave分成两个过程 :第一个是服务端收到指令直接告诉客户端开始执行;另外一个过程是一个子进程在完成后台的保存操作,操作完以后返回消息。**两个进程不相互影响**,所以在持久化期间Redis可以正常工作
9213+ bgsave 分成两个过程 :第一个是服务端收到指令直接告诉客户端开始执行;另外一个过程是一个子进程在完成后台的保存操作,操作完以后返回消息。**两个进程不相互影响**,所以在持久化期间 Redis 可以正常工作
92149214
9215- 注意:bgsave命令是针对save阻塞问题做的优化,Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用
9215+ 注意:bgsave 命令是针对 save 阻塞问题做的优化,Redis 内部所有涉及到 RDB 操作都采用 bgsave 的方式,save 命令可以放弃使用
92169216
92179217
92189218
@@ -9248,7 +9248,7 @@ save 300 10 #300s内10个key发生变化就进行持久化
92489248* 对数据产生了影响
92499249* 不进行数据比对,比如 name 键存在,重新 set name seazean 也算一次变化
92509250
9251- save配置要根据实际业务情况进行设置 ,频度过高或过低都会出现性能问题,结果可能是灾难性的
9251+ save 配置要根据实际业务情况进行设置 ,频度过高或过低都会出现性能问题,结果可能是灾难性的
92529252
92539253RDB三种启动方式对比:
92549254
@@ -9289,7 +9289,7 @@ RDB三种启动方式对比:
92899289 - RDB 是一个紧凑压缩的二进制文件,存储效率较高,但存储数据量较大时,存储效率较低
92909290 - RDB 内部存储的是 redis 在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
92919291 - RDB 恢复数据的速度要比 AOF 快很多,因为是快照,直接恢复
9292- - 应用:服务器中每X小时执行 bgsave 备份,并将 RDB 文件拷贝到远程机器中,用于灾难恢复
9292+ - 应用:服务器中每 X 小时执行 bgsave 备份,并将 RDB 文件拷贝到远程机器中,用于灾难恢复
92939293
92949294* RDB缺点:
92959295 - RDB 方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
@@ -9376,11 +9376,11 @@ AOF重写规则:
93769376
93779377- 非写入类的无效指令将被忽略,只保留最终数据的写入命令
93789378
9379- 如del key1、 hdel key2、srem key3、set key4 111、set key4 222等,select 指令虽然不更改数据,但是更改了数据的存储位置,此类命令同样需要记录
9379+ 如 del key1、 hdel key2、srem key3、set key4 111、set key4 222等,select 指令虽然不更改数据,但是更改了数据的存储位置,此类命令同样需要记录
93809380
93819381- 对同一数据的多条写命令合并为一条命令
93829382
9383- 如lpushlist1 a、lpush list1 b、lpush list1 c 可以转化为:lpush list1 a b c。
9383+ 如 lpushlist1 a、lpush list1 b、lpush list1 c 可以转化为:lpush list1 a b c。
93849384
93859385 为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素
93869386
@@ -9468,17 +9468,17 @@ AOF重写规则:
94689468
94699469- 数据呈现阶段有效性,建议使用 RDB 持久化方案
94709470
9471- 数据可以良好的做到阶段内无丢失,且恢复速度较快,阶段内数据恢复通常采用RDB方案
9471+ 数据可以良好的做到阶段内无丢失,且恢复速度较快,阶段内数据恢复通常采用 RDB 方案
94729472
9473- 注意:利用 RDB 实现紧凑的数据持久化会使 Redis 降的很低
9473+ 注意:利用 RDB 实现紧凑的数据持久化,存储数据量较大时,存储效率较低
94749474
94759475综合对比:
94769476
9477- - RDB与AOF的选择实际上是在做一种权衡 ,每种都有利有弊
9478- - 如不能承受数分钟以内的数据丢失,对业务数据非常敏感,选用AOF
9479- - 如能承受数分钟以内的数据丢失,且追求大数据集的恢复速度,选用RDB
9480- - 灾难恢复选用RDB
9481- - 双保险策略,同时开启 RDB和 AOF,重启后,Redis优先使用 AOF 来恢复数据,降低丢失数据的量
9477+ - RDB 与 AOF 的选择实际上是在做一种权衡 ,每种都有利有弊
9478+ - 如不能承受数分钟以内的数据丢失,对业务数据非常敏感,选用 AOF
9479+ - 如能承受数分钟以内的数据丢失,且追求大数据集的恢复速度,选用 RDB
9480+ - 灾难恢复选用 RDB
9481+ - 双保险策略,同时开启 RDB和 AOF,重启后,Redis 优先使用 AOF 来恢复数据,降低丢失数据的量
94829482
94839483
94849484
@@ -9488,7 +9488,7 @@ AOF重写规则:
94889488
94899489### fork
94909490
9491- #### 函数介绍
9491+ #### 介绍
94929492
94939493fork() 函数创建一个子进程,子进程与父进程几乎是完全相同的进程,系统先给子进程分配资源,然后把原来的进程的所有数据都复制到子进程中,只有少数值与父进程的值不同,相当于克隆了一个进程
94949494
@@ -9520,7 +9520,7 @@ fpid 的值在父子进程中不同:进程形成了链表,父进程的 fpid
95209520
95219521
95229522
9523- #### 函数使用
9523+ #### 使用
95249524
95259525基本使用:
95269526
@@ -9596,11 +9596,11 @@ int main(void)
95969596
95979597
95989598
9599- # ### 内存关系
9599+ # ### 内存
96009600
9601- fork ()调用之后父子进程的内存关系
9601+ fork () 调用之后父子进程的内存关系
96029602
9603- 早期 Linux 的fork () 实现时,就是全部复制,这种方法效率太低,而且造成了很大的内存浪费,现在 Linux 实现采用了两种方法来规避这种浪费:
9603+ 早期 Linux 的 fork () 实现时,就是全部复制,这种方法效率太低,而且造成了很大的内存浪费,现在 Linux 实现采用了两种方法来规避这种浪费:
96049604
96059605* 父子进程的代码段是相同的,所以代码段是没必要复制的,只需内核将代码段标记为只读,父子进程就共享此代码段。fork () 之后在进程创建代码段时,子进程的进程级页表项都指向和父进程相同的物理页帧
96069606
0 commit comments