redis的持久化策略分为两种:
rdb存储策略
和aof存储策略
1.rdb存储策略(数据保存位置 -> redis根目录/bin/dmp.rdb)
按照一定的时间间隔触发数据保存操作
优点:
不是在用户写数据的同时立即保存数据到硬盘,因此能给服务器大量减压
缺点:
其优点就是是其缺点,由于按照一定的时间间隔存储,所以在不正常或者非法关闭时,会导致最后一次的数据丢失
解决方案:
搭建redis集群或者采用aof存储策略(aof会牺牲性能)
1)关于rdb存储策略的配置(redis.conf文件)
redis默认配置如下
:(默认开启)save 900 1 # 15分钟执行一次写操作就会保存一次 save 300 10 # 5分钟执行10次写操作就会保存一次 save 60 10000 # 1分钟执行10000次写操作就会保存一次
2) rdb存储策略的原理
当触及到rbd持久化策略时,将会fork出一个子进程
同时会拍摄当前数据库的快照信息(SNAPSHOT)
父进程继续处理服务端其他业务:由子进程处理SNAPSHOT的持久化存储,当子进程持久化结束,则自动销毁
缺点:非法关闭,会丢失最后一次操作的数据
#### 2.aof存储策略(数据保存位置 -> redis根目录/bin/appendonly.aof)
> aof存储策略(append only file)----->默认关闭
>
> ***特点***:`将每次写操作存储到aof持久化文件(appendonly.aof)中,默认不开启,此模式追求该可靠型`
> ***缺点***:主要是性能差点(想比较rdb存储策略)
##### 1) 开启aof存储策略(redis.conf)
> appendonly yes
##### 2) aof持久化策略(redis.conf)
```shell
# appendfsync always
appendfsync everysec
# appendfsync no
当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。
当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一
次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。
当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响
建议采用 appendfsync everysec(缺省方式)
注:aof和rdb两种同时配置时,如果启动的时候aof可用,则使用aof存储策略,对于选择来说,aof追求高可靠性,而rdb模式追求高性能。
即优先级:aof > rdb
aof不能有异常,服务启动异常