我爱编程

Redis持久化存储

2018-05-17  本文已影响0人  内卷星球

Redis中数据存储模式

cache-only
persistence

cache-only:只做为“缓存”服务,不持久数据,数据在服务终止后将消失,
此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;
persistence:为内存中的数据持久备份到磁盘文件,在服务重启后可以恢复,
此模式下数据相对安全。

对于persistence持久化存储,Redis提供了两种持久化方法

Redis DataBase(简称RDB)
Append-only file (简称AOF)

如果同时开启两种持久化,会优先加载AOF进行恢复

RDB持久化:默认开启

指定时间间隔进行快照存储

优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候

#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下
启动的redis-cli,则数据会存储在当前src目录下
dir ./
##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,
需要谨慎,评估系统的变更操作密集程度  
##可以通过save “”来关闭snapshot功能  
#持久化(以快照的方式) 策略(默认)
save 900 1       (15分钟变更一次)
save 300 10     (5分钟变更10次)
save 60 10000  (1分钟变更1万次)
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,
“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,
同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes  

AOF持久化:默认不开启

以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加但不可以改写文件,redis启动之初会读取改文件进行重新构建数据

重写机制

当超过阈值,则启动内容压缩,只保留最小指令集,可使用命令:bgrewriteaof

auto-aof-rewrite-percentage 100  (一倍)
auto-aof-rewrite-min-size 64mb

持久化策略

##此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  

##指定aof文件名称  
appendfilename appendonly.aof  

##指定aof操作中文件同步策略,有三个合法值:always(记录立即同步,性能较差) everysec(每秒同步,官方推荐) no(将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的),默认为everysec  
appendfsync everysec  
##在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”  
no-appendfsync-on-rewrite no  

##aof文件rewrite触发的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才会触发rewrite,默认“64mb”  
auto-aof-rewrite-min-size 64mb  

##相对于“上一次”rewrite,本次rewrite触发时aof文件应该增长的百分比。  
##每一次rewrite之后,redis都会记录下此时“新aof”文件的大小(例如A),那么当aof文件增长到A*(1 + p)之后  
##触发下一次rewrite,每一次aof记录的添加,都会检测当前aof文件的尺寸。  
auto-aof-rewrite-percentage 100

比较

上一篇下一篇

猜你喜欢

热点阅读