【redis笔记】redis_持久化(4)
Page content
这一篇整理了redis持久化相关的内容。
redis虽然是内存行数据库,但是他的数据是可以持久化的,
当遇到特殊情况数据库宕机,可以通过持久化技术回复大部分的数据。
1.RDB(Redis DataBase)
在指定的时间间隔内将内存中的数据集 快照Snapshot
写入磁盘。
在redis.conf中配置文件名称,默认为dump.rdb
#rdb的保存的文件名
dbfilename dump.rdb
#rdb文件的保存路径
dir ./
#保存策略
save 900 1 //900秒内有一条数据变更
save 300 10 //300秒内有10条数据变更
save 60 10000 //60秒内有10000条数据变更
#手动保存快照
save //不接受存储数据,阻塞性的保存。
bgsave //fork()一个线程,非阻塞性保存
关于fork
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,
出于效率考虑,Linux中引入了“写时复制技术”,一般情况父进程和子进程会共用同一段物理内存,
只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程
其他配置项
#当Redis无法写入磁盘的话,直接关掉Redis的写操作
stop-writes-on-bgsave-error yes
#进行rdb保存时,将文件压缩
rdbcompression yes
#在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,
#但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
rdbchecksum yes
2.AOF(Append Of File)
以日志的形式来记录每个写操作
AOF默认不开启,需要手动在配置文件中配置
#打开AOF
appendonly on
#配置文件名, AOF文件的保存路径,同RDB的路径一致
appendfilename "appendonly.aof"
#AOF同步频率设置
appendfsync everysec
AOF和RDB同时开启,系统默认取AOF的数据
AOF是追加日志的方式存储数据的,所以过一些时间后文件会变得很大
可以使用命令**bgrewriteaof
**,只保留可恢复的数据。
#遇到AOF文件损坏,可通过以下命令进行恢复
redis-check-aof --fix appendonly.aof
##何时自动使用bgrewriteaof
auto-aof-rewrite-percentage 100 //当数据量多出(起初的)100%时
auto-aof-rewrite-min-size 64mb //当数据量超过64mb时
用哪种方式?
官方推荐两个都启用。
- 如果对数据不敏感,可以选单独用RDB。
- 不建议单独用 AOF,因为可能会出现Bug。
- 如果只是做纯内存缓存,可以都不用。
欢迎大家的意见和交流
email: li_mingxie@163.com