为了让数据在电脑重启后数据不丢失,需要将数据已某种形式同步到硬盘中
支持两种方式持久化 RDB(默认)、AOF
RDB 快照方式 通过快照(snapshotting)完成 进行快照的条件在用户的配置文件中定义
有两个参数组成 时间和改动key的个数 当在指定时间内被更改的键的个数大于指定的数值则会进行快照
save 900 1
save 300 10
save 60 10000
可以存在多个条件,他们是“或”的关系,禁用自动:注释或者删掉上面的参数就行 ;上面的意思是900秒(15分)内有一个键被更改或者300秒(5分)内有十个键被更改或者60秒内有10000个键被更改则进行快照保存
默认或保存到当前目录的dump.rdb
可以通过dir 指定目录
可以通过dbfilename指定文件名
注意RDB一旦服务器出现问题则会丢失最后一次快照后的数据,如果数据重要无法承受任何损失则考虑用AOF方式
AOF:追加日志方式 默认没有开启,一旦开启后没执行一条回更改redis的数据的命令,redis就会将该命令写入硬盘中的AOF文件默认文件名为appendonly.aof 默认目录RDB文件的目录相同
可以通过appendonly
appendonly yes
可以通过dir 指定目录
可以通过appendfilename指定文件名
appendfilename appendonly.aof
自动优化AOF文件,过滤之前被覆盖的冗余命令
auto-aof-rewrite-percentage 100 当目前的aof文件大小超过上一次重写时的aof文件袋下的百分之100会再次重写 auto-aof-rewrite-min-size 100 限制允许重写的最小aof文件大小
我们也可以使用bgrewriteaof命名手动执行重写
在启动reids时会自动逐个执行aof中的命令,载入速度比RDM慢点
每次执行更改数据库内容的操作时,AOF都会将命令记录在AOF文件,但是由于操作系统的缓存机制,数据并没有真正的写入磁盘,而是进入了系统的银盘缓存。在默认情况下系统没30秒会执行一次同步操作,一边讲缓存中的内容真正的写入硬盘,在这30秒的过程中如果系统异常退出会导致硬盘缓存中的数据丢失,这是aof不能容忍的,这就需要redis写入AOF文件后主动要求系统将缓存内容同步到硬盘中。
在redis中我们可以通过appendfsync参数配置设置同步的时机:
#appendfsync always 每次执行写入都会执行同步 appendfsync everysec 默认 每秒执行一次操作(推荐) #appendfsync no 30秒执行一次同步 将硬盘缓存中的数据写入磁盘
这种只能保证硬盘不损坏,杜绝硬盘损坏后数据不丢失最好的办法就是 (主从)复制