Redis持久化

两种持久化方式rdb和aof

RDB(Redis数据库) RDB持久性以指定的事件间隔执行数据集的时间点快照

AOF(APPEND ONLY FILE) AOF持久性记录服务器收到的每个写入操作 ,在服务器启动时再次时加载,从而重建原始数据集。命令使用与Redis协议本身相同的格式记录,仅以附加方式记录。当日志变得太大时,Redis可以在后台重写日志。

无持久性:如果希望数据在服务器运行期间一直存在,可以完全禁用持久性。RDB+AOF:可以在同一实例中组合AOF和RDB。注意,在这种情况下,当Redis重新启动时,AOF文件将用于重建原始数据集,因为它保证是最完整的(有待商榷—这里的保证最完整的意思不是绝对没问题,而是相对RDB来说数据是最完整的,不是全部是绝大多数,说人话就是会丢失最后一次的写入操作)。

 RDB持久化过程

 redis.conf配置dump文件

 432 # The filename where to dump the DB
 433 dbfilename dump.rdb

 配置生成的dump.rgb路径

 455 # Note that you must specify a directory here, not a file name.
 456 dir /myredis/

配置RDB快照保持策略

1. save 3600 1 :表示在最近的3600秒(即1小时)内,如果至少有1个键发生了变化,则执行一次持久化操作。换句话说,如果在过去1小时内至少有1个键被修改、添加或删除,Redis将执行一次快照保存操作。

2. save 300 100 :表示在最近的300秒(即5分钟)内,如果至少有100个键发生了变化,则执行一次持久化操作。换句话说,如果在过去5分钟内至少有100个键被修改、添加或删除,Redis将执行一次快照保存操作。

3. save 60 10000 :表示在最近的60秒(即1分钟)内,如果至少有10000个键发生了变化,则执行一次持久化操作。换句话说,如果在过去1分钟内至少有10000个键被修改、添加或删除,Redis将执行一次快照保存操作。

 382 #
 383 save 3600 1
 384 save 300 100
 385 save 60 10000

 RDB 优势

适合大规模的数据恢复

对数据完整性和一致性要求不高更适合使用(最后一次持久化可能造成数据丢失)

节省磁盘空间

恢复速度快

 RDB 劣势

fork的时候 内存中的数据被克隆了一份 大致2倍的膨胀性需要考虑

虽然redis在fork时使用了写时拷贝技术 

在备份周期在一定间隔时间做一次备份 所以redis down掉的话 会丢失最后一次的所有修改

小总结

RDB是一个非常紧凑的文件

RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程 接下来的工作交给子进程来做  父进程不需要在做其他io操作 所以RDB持久化方式可以最大化使用redis的性能

与AOF相比,在恢复大的数据集的时候,RDB方式会快一些

数据丢失风险大

RDB需要经常fock子进程来保存数据集到硬盘上  当数据集比较大的时候,fork的过程是很耗时的

AOF(APPEND ONLY FILE)

AOF持久化流程

aof文件的保存路径 同RDB的路径一致

1254 appendonly no #把这个值改成yes
1255
1256 # The name of the append only file (default: "appendonly.aof")
1257
1258 appendfilename "appendonly.aof"

AOF和RDB同时开启系统默认取AOF的数据

如遇到aof文件损坏通过/usr/local/bin/redis-check-aof--fix appendonly.aof进行修复

备份被写坏的AOF文件

恢复 : 重启redis 然后重新加载

AOF同步频率设置

  • appendfsync always:始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好
  • appendfsync everysec:每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统。

官方推荐

官方推荐两个都使用

如果对数据不敏感,可以单独使用RDB

不建议单独用AOF 因为可能出现Bug

总结

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.
  • Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大
  • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 同时开启两种持久化方式
  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据, 因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
  • 建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份), 快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。
  • 性能建议
    • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
    • 如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
    • 代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
    • 只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
    • 默认超过原大小100%大小时重写可以改到适当的数值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值