Redis持久化机制之RDB和AOF详解

问题一:Redis是什么?

①速度非常快的Nosql数据库,即非关系型数据库。基于key-value的内存存储,同时支持数据持久化到硬盘

    小问题:那么问题来了,它可不可以跟mybatis框架整合,进而对Redis数据库进行操作。答案很明显是不可以的,因为mybatis框架在整合无论是oracle和mysql数据库时,最大的特点就是ORM思想,即Object Relationship Mapping,对象关系映射。一个实体类对应一张表,基于ORM思想,会将数据库表中的数据查询出来的结果集映射到java对象上,方便在程序中操作数据。而在我们的redis,是非关系型数据库,即不存在表的概念,所以我们需要其他的方式对Redis数据库进行操作,后续会进行介绍。

②Redis的特点:

  • 高性能
  • 数据类型丰富
  • 基于内存存储,又支持持久化

问题二:Redis的持久化是什么?

redis支持将内存中的数据通过IO方式保存到硬盘,则可以保证数据可以重用并且保证安全。

问题三:RDB机制

①Snapshotting(RDB)机制的运行原理

 

简单来说:
1.在某些时刻,Redis通过fork产生子进程,一个父进程的快照(副本), 其中有和父进程当前时刻相同的数据
2.父进程继续处理client请求,增删改查等,子进程负责将快照(数据副本)写入临时 文件(默认文件名为dump.rdb)
3.子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。

 ②Snapshotting(RDB)机制的开发步骤

编辑redis.conf文件,进行修改参数:

save   900   1           #900秒超过1个key被修改 
save   300   10         #300秒超过10个key被修改
dbfilename dump.rdb    #快照文件名
stop-writes-on-bgsave-error yes   #快照失败后是否继续写操作
rdbcompression yes    #是否压缩快照文件

③RDB触发方式

  • 根据配置  save 900 1 等,在满足条件时自动触发
  • 执行  bgsave 指令,主动触发
  • 执行 save指令,主动触发,但会造成持久化过程中的主进程阻塞,不常用如果数据量很大时可以考虑使用,因为不用创建子进程,也就没有子进程 抢资源,所以save在生成快照时可以更快(夜深人静时手动触发)
  • 当通过 shutdown 关闭redis时,会自动触发

④ 细节

  • 如果发生系统崩溃,则会丢失最近一次rdb之后的数据,所以如果项目不能接受这样的数据损失,则不建议使用rdb
  • 如果数据量巨大,则创建子进程的时间长,导致redis卡顿,要谨慎设置save参数时间间隔大一些;或如果软件允许,可以每天在闲时手动同步
  • 将生成的快照文件,留在原地,则可以在重启redis后,保持数据状态
  • 将生产的快照文件,复制到其他redis服务中,可以方便的将数据移植过去

 问题四:AOP持久化

①Append-Only File(AOF)机制
Redis将每一个写操作(执行成功),写入aof文件,即记录所有的数据改动行为,Redis重启时只要从头到尾执行一次aof文件,即可恢复数据,也可以将aof文件复制到别的服务器,做数据移植。

②aop配置:编辑redis.conf文件

appendonly  yes           #启动AOF机制
appendfsync always        #每次收到写命令就立即强制 写入磁盘,保证完全的持久   
                                                   化,但产生极大的IO开销(不推荐使用)
appendfsync everysec       #每秒钟强制写入磁盘一次,在性能和持久化方面做了
                                                 很好的折中(推荐使用)
appendfsync no              #完全依赖os,虽然基本不对redis性能产生影响,但操作
                                                  系统的缓存区满时,会阻塞redis(不推荐使用)
appendfilename “appendonly.aof”    设置aof文件名  

③细节:

1.AOF文件会不断增长(可能比快照文件大几倍),在极端情况下,可能会对 硬盘空间造成压力
2.Redis重启时,需要重新执行一个可能非常大的AOF,时间会很长
3.AOF同步时间间隔小,数据更安全,理论上至多丢失1秒的数据

④注意:在重启时,要恢复数据,如果rdb文件和aof文件同时存在时 以AOF为准

问题五:RDB与AOP的比较

  1)RDB体量更小,AOF文件体量更大
  2)RDB的同步时间间隔大,AOF同步时间间隔小,所以,AOF更能保证数据的安全
  3)RDB有更快的恢复速度,可以用来做数据版本控制
  4)通过使用RDB和AOF,用户可以在重启或系统崩溃后保留数 据,但随着负载量变大和数据安全越来越重要,可以使用redis的复制特性做更好的数据安全保障

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值