Redis高级(持久化--redis主从架构--redis哨兵模式--redis分片集群)

目录

redis实现持久化的两种模式

redis主从架构

redis主从集群 -- 数据同步优化

redis主从集群+哨兵框架

redis分片集群


redis实现持久化的两种模式

RDB持久化


RDB全称Redis Database Backup file(Redis数据备份文件),也被称为数据快照,就是把redis内存中的所有数据写入到本地磁盘中, 当服务宕机重启后,可以读取本地磁盘文件来恢复数据,Redis数据备份文件被称为RDB文件,默认是保存在当前运行目录下(可通过配置文件更改相关保存信息)


执行时机:

        1) 执行save命令

        2) 执行bgsave命令

        3) 正常停机时

        4) 达到RDB自动保存的阈值时


save命令:

        执行save命令,会触发一次RDB持久,是主进程在进行磁盘IO, 此时无法对外提供服务,会阻塞请求, 只适用于手动停机,数据迁移的场景

 bgsave命令:

        与save命令不同的是,bgsave是异步执行的,从主进程fork一个子进程进行持久化操作,在磁盘IO的时候,不会阻塞请求,主进程能够正常的提供服务,值得注意的是在主线程fork的时候是阻塞请求的状态

RDB自动保存阈值:

        Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

save 900 1            # 900秒内,如果至少有1个key被修改,则执行bgsave
save 300 10           # 300秒内, 如果至少有10个key被修改,则执行bgsave
save 60 10000         # 60秒内,10000个key

# 如果是save "" 则表示禁用RDB

其他配置:

# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes

# RDB文件名称
dbfilename dump.rdb  

# 文件保存的路径目录
dir ./ 

RDB执行原理:

 save:

         操作系统会在redis中维护一个虚拟内存表" 页表 " ,页表和物理内存有映射关系,所以redis主进程在持久化的时候,只需要操作虚拟内存中的页表,操作系统会从页表中读取数据,实现磁盘IO

bgsave:

        会从主进程fork出一个子进程,fork的过程是将主进程中的页表复制到子进程中,子进程拥有同样的映射关系后,就可以读取物理内存,生成RDB文件. 这样虽然fork效率高,而且不会影响主进程对外提供服务,但是异步的,就会出现脏读的现象出现,而fork也想到了这一点,采用了copy-on-write技术:

        在子进程读的时候,会把内存数据标记成read-only状态,此时主线程只能进行读取,若要进行写操作,就要在内存中拷贝一份数据副本,对数据副本进行写操作,数据副本产生后,主线程页表就会映射数据副本,

        在redis优化中,会提到在给redis分配内存的时候尽量有一般的内存留余,在极端情况下,有可能子线程读取很慢,而主进程的写操作很多,就会导致拷贝很多的数据副本,甚至会拷贝全部的数据副本,这样redis内存就翻倍了,但这种情况几乎不会出现,但理论上是会出现


RDB的缺点:

        两次RDB操作之间如果服务宕机,就会丢失数据, 无法保证数据的强完整性

        fork子进程,生成RDB文件,压缩RDB文件都比较耗时

  AOF持久化


AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。当需要进行数据恢复的时候,重新执行AOF文件即可

 AOF模式的开启:

        该模式默认是不开启的,需要我们修改redis.conf配置文件来开启AOF:

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

        AOF的IO频率也可以通过配置文件进行更改:

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always 

# 写命
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值