@@ -2189,7 +2189,7 @@ rollback segment 称为回滚段,每个回滚段中有 1024 个 undo log segme
21892189
21902190持久性是指一个事务一旦被提交了,那么对数据库中数据的改变就是永久性的,接下来的其他操作或故障不应该对其有任何影响。
21912191
2192- redo log,记录数据页的物理修改 ,而不是某一行或某几行的修改,用来恢复提交后的物理数据页,且只能恢复到最后一次提交的位置
2192+ redo log,记录 ** 数据页的物理修改 ** ,而不是某一行或某几行的修改,用来恢复提交后的物理数据页,且只能恢复到最后一次提交的位置
21932193
21942194InnoDB 作为存储引擎,数据是存放在磁盘中,每次读写数据都需要磁盘 IO,效率会很低。InnoDB 提供了缓存 Buffer Pool,Buffer Pool 中包含了磁盘中部分数据页的映射,作为访问数据库的缓冲:
21952195
@@ -5455,7 +5455,7 @@ MySQL 的主从复制原理图:
54555455主从复制需要三个线程:** master(binlog dump thread)、slave(I/ O thread 、SQL thread)**
54565456
54575457- binlog dump thread:在主库事务提交时,负责把数据变更作为事件 Events 记录在二进制日志文件 binlog 中,并通知 slave 有数据更新
5458- - I/ O thread:负责从主服务器上读取二进制日志 ,并将 binlog 日志内容依次写到 relay log 文件的最末端,并将新的 binlog 文件名和位置记录到 master- info 文件中,以便下一次读取master 端新 binlog 日志时能告诉 master 服务器从新 binlog 日志的指定文件及位置开始读取新的 binlog 日志内容
5458+ - I/ O thread:负责从主服务器上拉取二进制日志 ,并将 binlog 日志内容依次写到 relay log 文件的最末端,并将新的 binlog 文件名和 offset 记录到 master- info 文件中,以便下一次读取master 端新 binlog 日志时能告诉 master 服务器从新 binlog 日志的指定文件及位置开始读取新的 binlog 日志内容
54595459- SQL thread:监测本地 relay log中新增了日志内容,读取中继日志并重做其中的 SQL 语句
54605460- 从库在 relay- log .info 中记录当前应用中继日志的文件名和位置点以便下一次数据复制
54615461
@@ -9621,7 +9621,9 @@ vfork(虚拟内存fork virtual memory fork):调用 vfork() 父进程被挂
96219621
96229622# ## 基本操作
96239623
9624- redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时按照添加顺序依次执行,中间不会被打断或者干扰
9624+ Redis 事务没有隔离级别的概念,Redis 单条命令式保存原子性的,但是事务不保证原子性
9625+
9626+ Redis 事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时按照添加顺序依次执行,中间不会被打断或者干扰
96259627
96269628* 开启事务
96279629
@@ -9722,7 +9724,7 @@ Redis 分布式锁的基本使用
97229724 * 对于返回设置成功的,拥有控制权,进行下一步的具体业务操作
97239725 * 对于返回设置失败的,不具有控制权,排队或等待
97249726
9725- * 操作完毕通过del操作释放锁
9727+ * 操作完毕通过 del 操作释放锁
97269728
97279729 ` ` ` sh
97289730 del lock-key
@@ -9749,9 +9751,9 @@ Redis 分布式锁的基本使用
97499751
97509752# ## 过期数据
97519753
9752- Redis是一种内存级数据库 ,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态
9754+ Redis 是一种内存级数据库 ,所有数据均存放在内存中,内存中的数据可以通过 TTL 指令获取其状态
97539755
9754- TTL返回的值有三种情况 :正数,-1,-2
9756+ TTL 返回的值有三种情况 :正数,-1,-2
97559757
97569758- 正数:代表该数据在内存中还能存活的时间
97579759- -1:永久有效的数据
@@ -9803,7 +9805,7 @@ TTL返回的值有三种情况:正数,-1,-2
98039805
98049806# ### 惰性删除
98059807
9806- 数据到达过期时间,不做处理。 等下次访问该数据时,我们需要判断:
9808+ 数据到达过期时间,不做处理, 等下次访问该数据时,我们需要判断:
98079809
98089810* 如果未过期,返回数据
98099811* 如果已过期,删除,返回不存在
@@ -9832,9 +9834,9 @@ TTL返回的值有三种情况:正数,-1,-2
98329834
98339835- Redis启动服务器初始化时,读取配置 server.hz 的值,默认为10。执行指令可以查看:info server
98349836
9835- - 每秒钟执行 server.hz 次 serverCron () -- > databasesCron () -- > activeExpireCycle ()
9837+ - 每秒钟执行 server.hz 次 serverCron () → databasesCron () → activeExpireCycle ()
98369838
9837- - databasesCron ()操作是轮询每个数据库
9839+ - databasesCron () 操作是轮询每个数据库
98389840
98399841- activeExpireCycle () 对某个数据库中的每个 expires 进行检测,每次执行耗时:250ms/server.hz
98409842
@@ -9852,7 +9854,7 @@ TTL返回的值有三种情况:正数,-1,-2
98529854
98539855定期删除特点:
98549856
9855- - CPU性能占用设置有峰值 ,检测频度可自定义设置
9857+ - CPU 性能占用设置有峰值 ,检测频度可自定义设置
98569858- 内存压力不是很大,长期占用内存的冷数据会被持续清理
98579859- 周期性抽查存储空间(随机抽查,重点抽查)
98589860
@@ -10190,7 +10192,7 @@ TTL返回的值有三种情况:正数,-1,-2
1019010192 * 获取 master 平均每秒产生写命令数据总量 write_size_per_second
1019110193 * 最优复制缓冲区空间 = 2 * second * write_size_per_second
1019210194
10193- 3. master单机内存占用主机内存的比例不应过大,建议使用50 %-70%的内存,留下30 %-50%的内存用于执 行bgsave命令和创建复制缓冲区
10195+ 3. master 单机内存占用主机内存的比例不应过大,建议使用 50 %-70% 的内存,留下 30 %-50% 的内存用于执行 bgsave 命令和创建复制缓冲区
1019410196
1019510197* 数据同步阶段slave说明
1019610198
@@ -10243,14 +10245,14 @@ TTL返回的值有三种情况:正数,-1,-2
1024310245* 复制偏移量:一个数字,描述复制缓冲区中的指令字节位置
1024410246
1024510247 - master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)
10246- - slave复制偏移量:记录slave接收master发送过来的指令字节对应的位置(一个)
10248+ - slave复制偏移量:记录slave接收master发送过来的指令字节对应的位置(一个)
1024710249
1024810250 作用:同步信息,比对 master 与 slave 的差异,当 slave 断线后,恢复数据使用
10249-
10251+
1025010252 数据来源:
10251-
10253+
1025210254 - master 端:发送一次记录一次
10253- - slave 端:接收一次记录一次
10255+ - slave 端:接收一次记录一次
1025410256
1025510257** 工作原理** :
1025610258
0 commit comments