Redis持久化

目录

Redis持久化的方式

快照方式

  持久化触发

    手动触发

    自动触发

   RDB文件恢复

   RDB优缺点

文件追加方式

混合持久化方式


     

Redis的读写都在内存中,但内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,将内存中的数据存储到磁盘中的过程,就是Redis的持久化。

Redis持久化的方式

快照方式

     RDB(Redis DataBase)将某一时刻的内存数据(内存快照(Snapshot)),以二进制的方式写入磁盘。

  持久化触发

    手动触发

      手动触发持久化的操作有两个:save和bgsave,它们的主要区别是:是否阻塞Redis主线程的执行.

      save命令:在redis客户端执行save命令,就会触发redis的持久化,但也会使redis处于阻塞状态,直到RDB持久化完成,才会响应其它客户端发来的请求,所以在生产环境中慎用。

      bgsave命令:(background save)顾名思义,是后台保存。它和save命令最大区别就是bgsave会在后台fork()一个子进程来执行持久化,整个过程只有在fork()子进程时有短暂的阻塞,当子进程被创建后, redis的主进程就可以响应其他客户端的请求。

    自动触发

     1.save m n 是指在m内,如果有n个键发生改变,则自动触发持久化。参数m和n可以在redis配置文件中找到

     例如:save 60 1  表示在60s内,至少有一个键发生改变,就会触发RDB持久化。

     当设置多个save m n命令时,满足任意一个条件都会触发持久化。

     例如:save 60 10   save 600 1

     当60s内如果有10个键值发生改变,就触发持久化,如果60s内少于10个键值发生改变,那redis就会判断600s内,redis的键值是否至少修改一次,如果满足就会触发持久化。

    2.flushall  flushall命令用于清空redis数据库,生产环境慎用。当redis执行了flushall命令后,就会触发自动持久化,把RDB文件清空。

    3.主从同步触发 在redis主从复制中,当从节点执行全量复制操作时,主节点会执行bgsave命令,并将RDB文件发送给从节点,该过程会自动触发Redis持久化。

   RDB文件恢复

     当Redis服务器启动时,如果Redis根目录存在RDB文件dump.rdb,Redis就会自动加载RDB文件恢复持久化数据。如果根目录没有dump.rdb文件,请先将dump.rdb文件移到redis的根目录中。

   RDB优缺点

    优点

       RDB的内容为二进制的数据,占用内存更小,更紧凑,更适合作为备份文件;

       RDB对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行redis服务恢复;

       RDB可以更大程度的提高redis的运行速度,因为每次持久化时Redis主进程都会fork()一个子进程,进行数据持久化到磁盘,Redis主进程并不会执行磁盘I/O等操作;

       与AOF相比,RDB可以更快的重启。

    缺点

        因为RDB只能保存某个时间间隔的数据,如果中途Redis服务被意外终止了,则会丢失一段时间内的Redis数据。

        RDB需要经常fork()才能使用子进程持久化数据,如果数据集很大,fork()可能会很耗时。

文件追加方式

AOF(Append Only File)记录所有的操作命令,并以文本形式追加到文件中。

     使用RDB持久化可能会造成最新数据丢失的风险。因为RDB的持久化有一定的时间间隔,在这个时间段内如果redis服务意外终止的话,就会造成最新数据的丢失。

持久化查询和设置

config get appendonly

开启AOF支持

1.通过命令行修改

config set appendonly yes

命令行启动的优缺点:命令行启动优点是无需重启 Redis 服务,缺点是如果 Redis 服务重启,则之前使用命令行设置的配置就会失效。

2.通过修改配置文件

只需要在配置文件中设置 appendonly yes 即可,默认 appendonly no 表示关闭 AOF 持久化。 配置文件启动 AOF 的优缺点:修改配置文件的缺点是每次修改配置文件都要重启 Redis 服务才能生效,优点是无论重启多少次 Redis 服务,配置文件中设置的配置信息都不会失效。

触发持久化

1.自动触发

有两种情况可以自动触发 AOF 持久化,分别是:满足 AOF 设置的策略触发满足 AOF 重写触发。其中,AOF 重写触发会在本文的后半部分详细介绍,这里重点来说 AOF 持久化策略都有哪些。 AOF 持久化策略,分为以下三种:

  • always:每条 Redis 操作命令都会写入磁盘,最多丢失一条数据;
  • everysec:每秒钟写入一次磁盘,最多丢失一秒的数据;
  • no:不设置写入磁盘的规则,根据当前操作系统来决定何时写入磁盘,Linux 默认 30s 写入一次数据至磁盘。

这三种配置可以在 Redis 的配置文件(redis.conf)中设置,如下代码所示:

# 开启每秒写入一次的持久化策略
appendfsync everysec

2.手动触发

在客户端执行bgrewriteaof命令之后,AOF持久化就会被触发

混合持久化方式

     Redis4.0之后新增的方式,混合持久化结合了RDB和AOF的优点,在写入的时候,先把当前数据以RDB的方式写入文件的开头,再将后续的操作命令以AOF的格式存入文件,这样既能保证Redis重启时的速度,又能减低数据丢失的风险。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值