Redis持久化

Redis是在内存中存储数据的,所以当服务器重启时,所有的数据机会丢失,为了保证数据的安全,Redis提供了将数据持久化到磁盘中的机制。
Redis提供两种数据持久化机制:RDB和AOF


1. 使用RDB来持久化

登录Redis数据库,调用 CONFIG SET命令来开启

CONFIG SET save "900 1"

如果想要永久的启用RDB持久化,可以在配置文件redis.conf中配置save参数

save 900 1
save 300 10

如果想要禁用RDB持久化,可以登录数据库将save的参数职位空

config set save ""

如果想永久禁用RDB持久化,需要在配置文件redis.conf中将save参数删除或者注释掉即可
也可以通过命令来查看当前是否启用了RDB功能

CONFIG SET save

save后面的值表示RDB触发策略,格式是x1,y1,x2,y2….
含义是:如果超过y个键发生改变且此时没有转储正在发生,则在x秒后进行数据转储。
Redis支持策略来控制RDB快照执行的频率

如果想要手动执行RDB快照,只需要登录进入数据库中执行BGSAVE即可(不推荐SAVE,会造成阻塞)
也可以通过INFO PERSISTENCE命令来获取与持久化相关的指标和状态

RDB持久化的缺点:RDB进行持久化并不能提供非常强的一致性,主要是当Redis进程崩溃或者出现故障时,两次RDB之间的数据会永久丢失

2.使用AOF来持久化

AOF是一种只记录Redis写入命令的追加式日志文件
登录Redis数据库来开启AOF持久化

config set appendonly yes

永久来开启AOF持久化,需要在redis.conf配置文件中添加

appendonly yes

想要禁用AOF持久化,则需要将也是参数设置为no

config set appendonly no

想要永久进行AOF持久化,则需要在redis.conf 配置文件中设置 appendonly no 并且重启服务器

两次的持久化都可以通过INFO PERSISTENCE来查看持久化的状态等相关的信息
使用INFO PERSISTENCE来查看RDB和AOF持久化状态
AOF工作原理:

  • 当Redis服务器接收到一个写入的命令,这个命令会写入到一个缓冲区
  • linux系统会调用fsync()方法来刷新数据到磁盘中,这个命令是阻塞的
  • Redis服务器关闭时,fsync()方法会被调用,以确保缓冲区的所有的数据会被刷新到磁盘中、

也可以通过参数来调整fsync()方法的调用,在redis.conf配置文件中设置

##对于每个写入的命令都调用fsync()
appendfsync always 
##每秒执行一次fsync()
appendfsync everysec 
## 永远不调用 fsync()
appendfsync no 

随着命令的增加AOF持久化的文件会逐渐增大,这个需要优化AOF文件的大小,Redis提供了一种机制:AOF重写
重写的操作:使用BGREWRITEAOF命令来开启AOF重写的过程
重写的原理:

  • Redis会创建一个子线程来执行AOF重写,这个子线程会创建一个新的AOF文件来存储重写的结果
  • 父进程继续响应请求,并且将命令追加到旧的AOF日志文件中
  • 子进程创建后,父进程将接受到的命令写入到aof_rewrite_buf_blocks的缓冲区
  • 当子进程完成AOF重写后,会向父进程发送一个信号,父进程会将aof_rewrite_buf_blocks缓冲区内的命令写入到新的AOF文件,同时新的AOF替换旧的AOF文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值