Redis(三)持久化

Redis采用RDB和AOF两种方式实现数据持久化。RDB在特定条件下创建快照文件,适合大规模数据恢复,但可能丢失部分数据;AOF记录每次写操作,保证数据完整性,通过bgrewriteaof重写减少体积,fsync确保数据不丢失。AOF通常在从节点使用。
摘要由CSDN通过智能技术生成

RDB(Redis DataBase)

Redis使用操作系统的多进程 COW(Copy On Write)机制来实现快照持久化。

Redis在持久化时会调用 glibc 的函数fork产生一个子进程,快照持久化完全交给子进程来处理,父进程继续处理客户端请求。

  • 触发条件

    • save满足规则的情况
    • 执行FLUSHALL、FLUSHDB
    • 退出Redis
  • 恢复RDB文件中的数据

    只需要将.rdb文件放在指定的目录,Redis启动时会自动加载并恢复其中数据

    目录存在位置:

    127.0.0.1:6379> config get dir
    1) "dir"
    2) "/usr/local/bin"
    
  • 应用场景:

    • 大规模数据恢复
    • 对数据完整性要求不高
  • 缺点:

    • 每次生成文件时有一定间隔。Redis如果宕机,将会缺失部分数据。
    • 生成.rdb文件时需要fork一个子进程,会有一些内存占用。

AOF(Append Only File)

Redis在收到客户端修改指令后,进行参数校验、逻辑处理,如果没问题,就立即将该指令文本存储到AOF日志中。

通常Redis的主节点不会进行持久化操作,持久化操作主要是从节点进行。

  • AOF重写

    Redis提供了bgrewriteaof指令用于对AOF日志进行瘦身,其原理就是开辟一个子进程对内存进行遍历,转换成一系列Redis的操作指令,序列化到一个新的AOF日志文件中。

  • fsync

    Liunx 的 glibc 提供了fsync(int fd)函数可以将指定文件的内容强制从内核缓存中刷到磁盘。只要Redis进程实时调用fsync函数就可以保证AOF日志不丢失。但是fsync操作是一个磁盘IO操作,非常慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值