备份数据:
save/bgsave命令用户用户数据库备份
将会在redis安装目录下创建dump.rdb文件
恢复数据:
将备份文件放在redis安装目录下,然后启动redis服务即可。
使用 config get dir 可以获取redis安装目录
持久化:redis是内存数据库,如果数据没有备份。那么设备掉电就会丢失数据。因此redis提供了两种方式做持久化方案:RDB和AOF。
rdb持久化:
将redis内存中的数据,定时备份到磁盘上保存。实际是通过一个子进程进行实现的。
子进程定时将数据备份到rdb临时文件中,再将临时rdb文件,覆盖磁盘上的rdb文件,并用二进制进行压缩。
缺点:只能定时备份,而且不能过于频繁,否则操作耗时,影响性能。
aof持久化:
我们可以用二进制日志文件,记录操作命令,来进行备份。(原rdb文件+执行操作日志=恢复的新数据)
记录执行命令的日志文件就叫做AOF文件。
redis创建一个缓存区叫aof_buf。用以存储命令。存储一定数量的命令,就将缓存区的的命令写入到aof文件中。
以下是刷新周期。达到刷新周期就会写入到aof文件。
appendfsync always: 每个事件周期都同步刷新一次
appendfsync everysec: 每一秒都同步刷新一次
appendfsync no: 我只管写,让操作系统自己决定什么时候真正写入吧
那么新的问题来了。aof文件经过不断的写入,体积不断增大。就会占用空间,分析文件时更加耗时。
aof文件重写:记录数据的最终结果。(省去数据的中间状态)(同样是用一个子进程)
新的问题又来了。如果再重写aof文件期间,有新的内容写入到aof文件,那么就会数据不一致的情况。
因此,重新建立一个aof重写缓冲区。用来存放,aof文件重写期间。新写入到aof文件中的内容。等待aof重写完毕,再进行aof文件的写入。