怎么做简单的企业网站,专门做黄昏恋的网站,如何做网站定位,网站建设实训目的https://www.bilibili.com/video/BV1cr4y1671t?p96 https://blog.csdn.net/weixin_54232666/article/details/128821360 单点redis问题#xff1a;
数据丢失问题#xff1a;实现Redis数据持久化并发能力问题#xff1a;搭建主从集群#xff0c;实现读写分离故障恢复问题96 https://blog.csdn.net/weixin_54232666/article/details/128821360 单点redis问题
数据丢失问题实现Redis数据持久化并发能力问题搭建主从集群实现读写分离故障恢复问题利用Redis哨兵实现健康检测和自动恢复存储能力问题搭建分片集群利用插槽机制实现动态扩容类似elasticsearch RDB持久化
RDBRedis数据备份文件也叫Redis数据快照。就是把内存中的所有数据都记录到磁盘中当redis实例故障重启后从磁盘读取快照文件恢复数据。 快照文件称RDB文件默认保存在当前运行目录
通过 save 和 bgsave命令
save由Redis主进程来执行RDB,会阻塞所有命令 bgsave 会fork一个子进程来生成 RDB 文件这样可以避免主线程的阻塞 Redis停机时会自动执行一次RDB。把redis弄成服务了的话不太好看用reids-server就很容易看到
RDB 文件的加载是在服务器启动时自动执行的。
配置RDB触发机制通过配置文件的选项来实现每隔一段时间自动执行一次 bgsave 命令
我的配置文件位置 /usr/local/src/redis-6.2.6/redis.conf
#900秒内如果至少有1个key被修改则执行bgsave,如果是save 则表示禁用RDB
save 900 1# 禁用RDB
save save 300 10
save 60 10000RDB其他配置
#是否压缩建议不开启压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes
#RDB文件名称
dbfilename dump.rdb
#文件保存的路径目录
dir ./bgsave开始时会fork主进程得到子进程子进程共享主进程的内存数据。完成fork后读取内存数据并写入RDB文件。 子进程和父进程是共享同一片内存数据的因为创建子进程的时候会复制父进程的页表但是页表指向的物理内存还是一个。
fork采用的是copy-on-write技术
当主进程执行读操作访问共享内存当主进程执行写操作则会拷贝一份数据执行写操作只有在发生修改内存数据的情况时物理内存才会被复制一份。极端情况下如果所有的共享内存都被修改则此时的内存占用是原先的 2 倍。所以redis要预留内存 1、RDB方式bgsave的基本流程 fork主进程得到一个子进程共享内存空间 子进程读取内存数据并写入新的RDB文件 用新RDB文件替换I旧的RDB文件。 2、RDB会在什么时候执行save 60 1000代表什么含义 默认是服务停止时。 代表60秒内至少执行1000次修改则触发RDB 3、RDB的缺点 RDB执行间隔时间长两次RDB之间写入数据有丢失的风险 fork子进程、压缩、写出RDB文件都比较耗时 AOF
AOF称为追加文件redis处理的每个写命令都会记录在AOF文件可以看做是命令日志文件。
AOF默认是关闭的需要修改redis.conf配置文件来开启AOF:
#是否开启AOF功能默认是no
appendonly yes
#AOF文件的名称
appendfilename appendonly.aofAOF的命令记录的频率也可以通过redis.conf文件来配置
#表示每执行一次写命令立即记录到AOF文件
appendfsync always
#写命令执行完先放入AOF缓冲区然后表示每隔1秒将缓冲区数据写到AOF文件是默认方案最多会丢失1s中内的数据
appendfsync everysec
#写命令执行完先放入AOF缓冲区由操作系统决定何时将缓冲区内容写回磁盘
appendfsync noAOF文件重写机制 因为是记录命令AOF文件会比RDB文件大很多而且AOF会记录对同一个key的多次修改通过执行bgrewriteaof命令可以让AOF文件执行重写功能用最少的命令达到相同的效果。
Redis也可以在触发阈值时自动重写AOF文件阈值在redis.conf中配置
#A0F文件比上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
#AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mbRedis 的重写 AOF 过程是由后台子进程 bgrewriteaof 来完成的
混合持久化
将 RDB 和 AOF 合体使用该方法叫混合使用 AOF 日志和内存快照也叫混合持久化。
修改redis配置文件
aof-use-rdb-preamble yes当开启了混合持久化时在 AOF 重写日志时fork 出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件然后主线程处理的操作命令会被记录在重写缓冲区里重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件。
使用了混合持久化AOF 文件的前半部分是 RDB 格式的全量数据后半部分是 AOF 格式的增量数据。
优点重启 Redis 加载数据的时候由于前半部分是 RDB 内容加载的速度会很快。加载后半部分的 AOF 内容这里的内容是 Redis 后台子进程重写 AOF 期间主线程处理的操作命令可以使得数据更少的丢失。