网站开发背景设置,wordpress图片尺寸 样式,wordpress搬家后错乱,电商网站建设哪家好数据持久化 Redis、主从集群、哨兵机制 Redis分片集群 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF3.2 RDB#xff08;默认方式#xff09;RDB 方式#xff1a;执行快照时#xff0c;数据能被修改吗#xff1f;RDB 方式总结 3.3 RDB 和 AOF 组合… 数据持久化 Redis、主从集群、哨兵机制 Redis分片集群 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF3.2 RDB默认方式RDB 方式执行快照时数据能被修改吗RDB 方式总结 3.3 RDB 和 AOF 组合混合持久化 1、单点 redis 的问题
1. 数据丢失问题 2. 存储能力问题 3. 并发能力问题 4. 故障恢复问题
2、主从复制
由于数据都是存储在一台服务器上如果出事就完犊子了比如
- 如果服务器发生了宕机由于数据恢复是需要点时间那么这个期间是无法服务新的请求的 - 如果这台服务器的硬盘出现了故障可能数据就都丢失了。主从复制过程 第一阶段建立链接、协商同步
服务器 B 执行这条命令 服务器B 就是服务器A的从服务器
replicaof 服务器 A 的 IP 地址 服务器 A 的 Redis 端口号第二阶段主服务器同步数据给从服务器
第三阶段主服务器发送新写操作命令给从服务器
2.1 命令传播
主从服务器第一次同步后双方就会维护一个 TCP 连接
后续主服务器可以通过这个连接继续将写操作命令传播给从服务器然后从服务器执行该命令使得与主服务器的数据库状态相同。
而且这个连接是长连接的目的是避免频繁的 TCP 连接和断开带来的性能开销。
上面的这个过程被称为基于长连接的命令传播通过这种方式来保证第一次同步后的主从服务器的数据一致性。
3、Redis的持久化
RDBRedis DataBase 持久化AOFAppend Only File 持久化
3.1 AOF Redis 是先执行写操作命令后才将该命令记录到 AOF 日志里的这么做其实有两个好处。
避免额外的检查开销 万一先记录到日志 而命令错了 又需要回复日志 造成额外开销不会阻塞当前写操作命令的执行
Redis 提供了三种将 AOF 日志写回硬盘的策略分别是 Always、Everysec 和 No这三种策略在可靠性上是从高到低而在性能上则是从低到高。
随着执行的命令越多AOF 文件的体积自然也会越来越大为了避免日志文件过大 Redis 提供了 AOF 重写机制它会直接扫描数据中所有的键值对数据然后为每一个键值对生成一条写操作命令接着将该命令写入到新的 AOF 文件重写完成后就替换掉现有的 AOF 日志。重写的过程是由后台子进程完成的这样可以使得主进程可以继续正常处理命令。
用 AOF 日志的方式来恢复数据其实是很慢的因为 Redis 执行命令由单线程负责的而 AOF 日志恢复数据的方式是顺序执行日志里的每一条命令如果 AOF 日志很大这个重放的过程就会很慢了。
3.2 RDB默认方式
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
既然RDB机制是通过把某个时刻的所有数据生成一个快照来保存那么就应该有一种触发机制是实现这个过程。对于RDB来说提供了三种机制save、bgsave、自动化
RDB 快照就是记录某一个瞬间的内存数据记录的是实际数据而 AOF 文件记录的是命令操作的日志而不是实际的数据。 因此在 Redis 恢复数据时 RDB 恢复数据的效率会比 AOF 高些因为直接将 RDB 文件读入内存就可以不需要像 AOF 那样还需要额外执行操作命令的步骤才能恢复数据。
save 和 bgsave 的区别
save是在主线程生成 RDB 文件和执行操作命令在同一线程如果写入 PDB 文件时间太长会阻塞主线程。bgsave 会创建一个子进程来生成 PDB 文件可以避免 主线程阻塞。
通过配置文件设置每隔一段时间自动执行一次 bgsave 命令默认
save 900 1 # 900 秒之内对数据库进行了至少 1 次修改
save 300 10 # 300 秒之内对数据库进行了至少 10 次修改
save 60 10000 # 60 秒之内对数据库进行了至少 10000 次修改RDB 方式执行快照时数据能被修改吗
执行 bgsave 过程中数据是能被修改的写时复制技术Copy-On-Write, COW。
执行 bgsave 命令的时候会通过 fork() 创建子进程此时子进程和父进程是共享同一片内存数据的因为创建子进程的时候会复制父进程的页表但是页表指向的物理内存还是一个。
RDB 方式总结
尽管 RDB 比 AOF 的数据恢复速度快但是快照的频率不好把握
如果频率太低两次快照间一旦服务器发生宕机就可能会比较多的数据丢失如果频率太高频繁写入磁盘和创建子进程会带来额外的性能开销。
3.3 RDB 和 AOF 组合混合持久化
组合RDB恢复的优点和AOF丢失数据的优点
当开启了混合持久化时在 AOF 重写日志时fork 出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件然后主线程处理的操作命令会被记录在重写缓冲区里重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件。
也就是说使用了混合持久化AOF 文件的前半部分是 RDB 格式的全量数据后半部分是 AOF 格式的增量数据。