当前位置 > it书童 > redis > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

redis持久化机制

redis it书童 2019-10-05 11:57:51 0赞 0踩 636阅读 0评论

redis为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。

数据保存到硬盘的过程就称为“持久化”效果。

redis支持两种持久化方式:

  • snapshotting(快照)默认方式

  • append-only file(缩写aof)的方式

snapshotting快照方式

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中(备份文件名字默认是dump.rdb),如果数据非常多(10-20G)就不适合频繁进行该持久化操作。

触发机制:每隔N分钟或N次写操作后,从内存dump数据形成rdb文件,压缩放在备份的目录中。

redis.conf中默认有以下触发条件

  • save 900 1 # 900秒内如果超过1个key被修改,发起快照

  • save 300 10 # 300秒内如果超过10个key被修改,发起快照

  • save 60 10000 # 60秒内如果超过10000个key被修改,发起快照

屏蔽触发条件,即可关闭快照方式

可以自定义配置快照文件的存储位置及文件名

手动发起快照

两种方式完成手动保存。

  • 在登录状态时执行bgsave
127.0.0.1:6379> bgsave
Background saving started
  • 在没有登录状态时
$ redis-cli bgsave
Background saving started

由于快照方式是在一定间隔做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改

append-only-file 追加方式持久化

本质:把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。

开启AOF

  • appendonly yes #启用aof持久化方式

  • appendfilename appendonly.aof #保存命令的文件

触发条件

  • appendfsync always #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

  • appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

  • appendfsync no #完全依赖 os,性能最好,持久化没保证

修改完成后,重启redis

aof文件的重写

aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.

以解决aof日志过大的问题.

例如:可以把多个incr指令换为一个set指令

  • auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写

  • auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

  • no-appendfsync-on-rewrite yes #正在导出rdb快照的过程中,要不要停止同步aof

推荐两种方式同时开启

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/287/redis-persistence-mechanism