redis是一个可持久化的内存、key-value数据库。
作为内存数据库,为了防止服务器断电或系统宕机而引起的数据丢失问题,Redis自带了持久化功能,就是将内存中的数据同步到磁盘来保证持久化(防止数据丢失)。
redis支持两种持久化方式:RDB(redis database)和AOF(append only file)。
RDB(redis database)持久化
概念:在指定的时间间隔内将内存中的数据集快照(Snapshot)写入磁盘,待服务重启时,将快照文件读入内存中。
原理: 在持久化时,redis使用Fork方式单独创建一个进程来进行持久化,该进程会将内存中的数据写入到一个临时文件中,待持久化结束后,用临时文件替换上次持久化保存的文件(默认的文件名为dump.rdb)。
Fork原理:复制一个与当前进程一样的进程,新进程的所有数据都与原进程一样,但是一个全新的进程,并作为原进程的子进程。
触发条件:可以通过 redis命令 或者配置 redis.conf 文件来指定redis持久化的时机。
(1)使用命令
save立刻持久化,其他操作全部阻塞。
bgsave( redis会在后台异步进行快照操作,同时还可响应客户端的请求,可用命令 lastsave 获取最后一次成功执行快照的时间 )
flushall ( 清空命令也会触发持久化操作,但dump.rdb文件中是空的,无意义)
shutdown ( 关闭数据库命令也会触发redis持久化操作 )
(2)使用 redis.conf 配置文件
相关配置位于 redis.conf 文件中的 "SNAPSHOTTING" 配置部分:save <seconds> <changes> 指定在 seconds 秒内有 changes 次跟新操作,就进行一次持久化。
禁用RDB持久化: 可以通过 redis命令 或者配置 redis.conf 文件来禁用 RDB持久化
(1)使用命令
redis-cli config set save ""
(2)使用 redis.conf 配置文件
相关配置位于 redis.conf 文件中的 "SNAPSHOTTING" 配置部分,设置 save "" 配置时,代表禁用RDB持久化。
持久化文件:位于 redis.conf 文件中的 "SNAPSHOTTING" 配置部分:
dir 参数配置持久化文件的目录,dbfilename 参数配置持久化参数的名称。
恢复持久化文件:将备份文件移动至 dir 参数配置持久化文件的目录下,并将文件名改为 dbfilename 参数配置持久化参数的文件名,然后启动数据库即可恢复数据。
若 dump.rdb 文件存在异常,数据恢复将报错。可使用命令 redis-check-dump --fix <filename> 命令对 dump.rdb 持久化文件进行修复,然后重启redis服务即可。
网友评论