Redis的持久化方案详解_Redis

来源:脚本之家  责任编辑:小易  

1、 快照的方式持久化到磁盘自动持久化规则配置save 900 1save 300 10

Redis支持RDB与AOF两种持久化机制,持久化可以避免因进程异常退出或down机导致的数据丢失问题,在下次重启时能利用之前的持久化文件实现数据恢复。

Redis持久化简单概括为两点:RDB (Redis DataBase)AOF (Append

RDB持久化

本身的持久化,会可能丢失数据,因为本身的持久化,不是实时的,是数据先在内存,再定时的保存到硬盘来达到

RDB持久化即通过创建快照(压缩的二进制文件)的方式进行持久化,保存某个时间点的全量数据。RDB持久化是Redis默认的持久化方式。RDB持久化的触发包括手动触发与自动触发两种方式。

1、 快照的方式持久化到磁盘自动持久化规则配置save 900 1save 300 10

手动触发 save, 在命令行执行save命令,将以同步的方式创建rdb文件保存快照,会阻塞服务器的主进程,生产环境中不要用 bgsave, 在命令行执行bgsave命令,将通过fork一个子进程以异步的方式创建rdb文件保存快照,除了fork时有阻塞,子进程在创建rdb文件时,主进程可继续处理请求

把redis中的数据持久化存储到mysql中有什么现成的优秀框架吗redis 存在内存中,mys

“你说,修地铁的时候,原来的那些土都到哪去了?”从天安门西站刚坐上地铁还没到西单,刚刚还一脸兴奋的李老三突然满面愁容地问我。真够操心的。北京地铁里的土离老家玉米地里的土隔着好几百里地呢。伺候好玉米地里的土就已经够累的了,哪还有心思和力气管首都人民的一亩三分地。“运走了呗。还能咋?”我懒得回答。李老三瞥了我一眼,显然是对我的答案不满意。也难怪,虽然我在北京每天要有两个多小时因为坐地铁上下班而不见天日,但在李老三眼里,这并不妨碍我仍然是我们村里最见过世面的人。“这么多土,咋运?我看,肯定是在地铁下面重新挖了坑,把土埋里边了。”把土挖坑埋起来?!亏他想得出来……我真不知道是要晕倒还是要跪倒。“那新挖

自动触发

目前来看5吋手机里性价比最高的是今年推出的5.15英寸小米5C,采用小米自家的澎湃处理器,3GB+64GB配置,135克机身,并且搭配了小米5S的摄像头1200万像素的暗夜之眼,售价仅为1299元,小米5S售价1999元,所以这么比起来性价比5C相当划算。图为小米5C5.15英寸,3GB+64GB配置,135克机身,并且搭配了小米5S的摄像头1200万像素的暗夜之眼,售价仅为1299元另外一款也是最近刚出的5.5英寸屏幕的小米5X,采用当前主流的骁龙625处理器,4GB+32GB配置,3080mAh电池,且搭配了变焦双摄1200万像素摄像头,售价也为1299元,要知道同样搭配变焦双摄的小米6售

在redis.conf中配置 save m n 定时触发,如 save 900 1表示在900s内至少存在一次更新就触发

狗狗の跳蚤二者貌似关系紧密,但为什么有的汪经常性的被跳蚤困扰,有的汪却从来不招跳蚤呢?★什么样的狗狗爱招跳蚤?身体状况不佳,患病,老弱,或营养不良。幼犬。★为什么健康的狗狗身上没有跳蚤虱子呢?皆因健康的狗狗皮毛中分泌一种保护油脂,油脂让皮毛富有光泽,防止尘土粘结,更重要的就是抵御跳蚤虱子的侵扰。当跳蚤虱子进入健康狗的皮毛中,很快就会被皮毛中所含的油脂包裹呼吸器官,导致跳蚤虱子窒息而亡。所以健康的狗是很少会招跳蚤的。★为什么在众多的狗狗中,经常出现健康狗狗也会招跳蚤呢?洗澡过勤,频繁洗澡使他们皮毛里的油脂流失得不到滋润补充。没有足够的动物蛋白质皮毛难以分泌出足够的保护油脂,皮毛也会显得干枯,这时

主从复制时,如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点

《战狼2》是什么?时代感,爱国情,英雄心,满满的正能量。《妖猫传》呢,一看这名字就是娱乐无下限的所谓艺术之作,和《战狼2》毫无可比性。陈凯歌喊话吴京,说穿了就是明着蹭热度而已。一个披着中国人皮的美国导演,用日本演员拍了一部日本人写的电影,然后拿到中国来,和满屏爱国情怀的电影《战狼2》争票房,还扬言一较高下,陈凯歌一定是在日本吃人屎宴吃多了!不错艺术无国界,但是观众有国界,你《妖猫传》在日本在美国卖100亿那是你陈凯歌的成功,但你想在中国的电影市场和《战狼2》一较高下,估计你会输得很惨。不信走着瞧。

执行debug reload命令重新加载Redis时

执行shutdown且没有开启AOF持久化

redis.conf中RDB持久化配置

 # 只要满足下列条件之一,则会执行bgsave命令

save 900 1 # 在900s内存在至少一次写操作

save 300 10

save 60 10000

# 禁用RBD持久化,可在最后加 save ""

# 当备份进程出错时主进程是否停止写入操作

stop-writes-on-bgsave-error yes

# 是否压缩rdb文件 推荐no 相对于硬盘成本cpu资源更贵

rdbcompression no

AOF持久化

AOF(Append-Only-File)持久化即记录所有变更数据库状态的指令,以append的形式追加保存到AOF文件中。在服务器下次启动时,就可以通过载入和执行AOF文件中保存的命令,来还原服务器关闭前的数据库状态。

redis.conf中AOF持久化配置如下

# 默认关闭AOF,若要开启将no改为yes

appendonly no

# append文件的名字

appendfilename "appendonly.aof"

# 每隔一秒将缓存区内容写入文件 默认开启的写入方式

appendfsync everysec

# 当AOF文件大小的增长率大于该配置项时自动开启重写(这里指超过原大小的100%)。

auto-aof-rewrite-percentage 100

# 当AOF文件大小大于该配置项时自动开启重写

auto-aof-rewrite-min-size 64mb

AOF持久化的实现包括3个步骤: 命令追加:将命令追加到AOF缓冲区

文件写入:缓冲区内容写到AOF文件

文件保存:AOF文件保存到磁盘

“你说,修地铁的时候,原来的那些土都到哪去了?”从天安门西站刚坐上地铁还没到西单,刚刚还一脸兴奋的李老三突然满面愁容地问我。真够操心的。北京地铁里的土离老家玉米地里的土隔着好几百里地呢。伺候好玉米地里的土就已经够累的了,哪还有心思和力气管首都人民的一亩三分地。“运走了呗。还能咋?”我懒得回答。李老三瞥了我一眼,显然是对我的答案不满意。也难怪,虽然我在北京每天要有两个多小时因为坐地铁上下班而不见天日,但在李老三眼里,这并不妨碍我仍然是我们村里最见过世面的人。“这么多土,咋运?我看,肯定是在地铁下面重新挖了坑,把土埋里边了。”把土挖坑埋起来?!亏他想得出来……我真不知道是要晕倒还是要跪倒。“那新挖

其中后两步的频率通过appendfsync来配置,appendfsync的选项包括 always, 每执行一个命令就保存一次,安全性最高,最多只丢失一个命令的数据,但是性能也最低(频繁的磁盘IO)

everysec,每一秒保存一次,推荐使用,在安全性与性能之间折中,最多丢失一秒的数据

no, 依赖操作系统来执行(一般大概30s一次的样子),安全性最低,性能最高,丢失操作系统最后一次对AOF文件触发SAVE操作之后的数据

“你说,修地铁的时候,原来的那些土都到哪去了?”从天安门西站刚坐上地铁还没到西单,刚刚还一脸兴奋的李老三突然满面愁容地问我。真够操心的。北京地铁里的土离老家玉米地里的土隔着好几百里地呢。伺候好玉米地里的土就已经够累的了,哪还有心思和力气管首都人民的一亩三分地。“运走了呗。还能咋?”我懒得回答。李老三瞥了我一眼,显然是对我的答案不满意。也难怪,虽然我在北京每天要有两个多小时因为坐地铁上下班而不见天日,但在李老三眼里,这并不妨碍我仍然是我们村里最见过世面的人。“这么多土,咋运?我看,肯定是在地铁下面重新挖了坑,把土埋里边了。”把土挖坑埋起来?!亏他想得出来……我真不知道是要晕倒还是要跪倒。“那新挖

AOF通过保存命令来持久化,随着时间的推移,AOF文件会越来越大,Redis通过AOF文件重写来解决AOF文件不断增大的问题(可以减少文件的磁盘占有量,加快数据恢复的速度),原理如下:

调用fork,创建一个子进程

子进程读取当前数据库的状态来“重写”一个新的AOF文件(这里虽然叫“重写”,但实际并没有对旧文件进行任何读取,而是根据数据库的当前状态来形成指令)

主进程持续将新的变动同时写到AOF重写缓冲区与原来的AOF缓冲区中

主进程获取到子进程重写AOF完成的信号,调用信号处理函数将AOF重写缓冲区内容写入新的AOF文件中,并对新文件进行重命名,原子地覆盖原有AOF文件,完成新旧文件的替换

AOF的重写也分为手动触发与自动触发 手动触发: 直接调用bgrewriteaof命令 自动触发: 根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机。其中auto-aof-rewrite-min-size表示运行AOF重写时文件最小体积,默认为64MB。auto-aof-rewrite-percentage表示当前AOF文件大小(aof_current_size)和上一次重写后AOF文件大小(aof_base_size)的比值。自动触发时机为 aof_current_size > auto-aof-rewrite-min-size &&(aof_current_size - aof_base_size)/aof_base_size> = auto-aof-rewrite-percentage

“你说,修地铁的时候,原来的那些土都到哪去了?”从天安门西站刚坐上地铁还没到西单,刚刚还一脸兴奋的李老三突然满面愁容地问我。真够操心的。北京地铁里的土离老家玉米地里的土隔着好几百里地呢。伺候好玉米地里的土就已经够累的了,哪还有心思和力气管首都人民的一亩三分地。“运走了呗。还能咋?”我懒得回答。李老三瞥了我一眼,显然是对我的答案不满意。也难怪,虽然我在北京每天要有两个多小时因为坐地铁上下班而不见天日,但在李老三眼里,这并不妨碍我仍然是我们村里最见过世面的人。“这么多土,咋运?我看,肯定是在地铁下面重新挖了坑,把土埋里边了。”把土挖坑埋起来?!亏他想得出来……我真不知道是要晕倒还是要跪倒。“那新挖

RDB vs AOF

RDB与AOF两种方式各有优缺点。 RDB的优点:与AOF相比,RDB文件相对较小,恢复数据比较快(原因见数据恢复部分) RDB的缺点:服务器宕机,RBD方式会丢失掉上一次RDB持久化后的数据;使用bgsave fork子进程时会耗费内存。 AOF的优点: AOF只是追加文件,对服务器性能影响较小,速度比RDB快,消耗内存也少,同时可读性高。 AOF的缺点:生成的文件相对较大,即使通过AOF重写,仍然会比较大;恢复数据的速度比RDB慢。

数据库的恢复

服务器启动时,如果没有开启AOF持久化功能,则会自动载入RDB文件,期间会阻塞主进程。如果开启了AOF持久化功能,服务器则会优先使用AOF文件来还原数据库状态,因为AOF文件的更新频率通常比RDB文件的更新频率高,保存的数据更完整。

redis数据库恢复的处理流程如下,

在数据恢复方面,RDB的启动时间会更短,原因有两个:

RDB 文件中每一条数据只有一条记录,不会像AOF日志那样可能有一条数据的多次操作记录。所以每条数据只需要写一次就行了,文件相对较小。

RDB 文件的存储格式和Redis数据在内存中的编码格式是一致的,不需要再进行数据编码工作,所以在CPU消耗上要远小于AOF日志的加载。

但是在进行RDB持久化时,fork出来进行dump操作的子进程会占用与父进程一样的内存,采用的copy-on-write机制,对性能的影响和内存的消耗都是比较大的。比如16G内存,Redis已经使用了10G,这时save的话会再生成10G,变成20G,大于系统的16G。这时候会发生交换,要是虚拟内存不够则会崩溃,导致数据丢失。所以在用redis的时候一定对系统内存做好容量规划。

RDB、AOF混合持久化

Redis从4.0版开始支持RDB与AOF的混合持久化方案。首先由RDB定期完成内存快照的备份,然后再由AOF完成两次RDB之间的数据备份,由这两部分共同构成持久化文件。该方案的优点是充分利用了RDB加载快、备份文件小及AOF尽可能不丢数据的特性。缺点是兼容性差,一旦开启了混合持久化,在4.0之前的版本都不识别该持久化文件,同时由于前部分是RDB格式,阅读性较低。

开启混合持久化

aof-use-rdb-preamble yes

数据恢复加载过程就是先按照RDB进行加载,然后把AOF命令追加写入。

持久化方案的建议

如果Redis只是用来做缓存服务器,比如数据库查询数据后缓存,那可以不用考虑持久化,因为缓存服务失效还能再从数据库获取恢复。

如果你要想提供很高的数据保障性,那么建议你同时使用两种持久化方式。如果你可以接受灾难带来的几分钟的数据丢失,那么可以仅使用RDB。

通常的设计思路是利用主从复制机制来弥补持久化时性能上的影响。即Master上RDB、AOF都不做,保证Master的读写性能,而Slave上则同时开启RDB和AOF(或4.0以上版本的混合持久化方式)来进行持久化,保证数据的安全性。

到此这篇关于Redis的持久化方案详解的文章就介绍到这了,更多相关Redis的持久化方案内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

REDIS学习查看redis状态,以及rdb和aof两种持久化方案的区别

命令:redis-cli info  //查看redis服务器状态的

rdb : redis database 默认开启的,是将数据从内存备份到硬盘中。

aof:append only f 需要自己根据需要开启,是将执行命令存储在一个文件中。

建议看一下apeit-程序猿IT的文章《redis数据持久化》,讲的简单明了。

持久化redis有几种方式

主要有两种方式:

① 快照持久化

在Redis配置文件中已经自动开启了,

格式是:save N M

表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。

当然我们也可以手动执行save或者bgsave(异步)命令来做快照

②append only file AOF持久化

总共有三种模式,如

appendfsync everysec默认的是每秒强制写入磁盘一次

appendfsync always 每次执行写操作的时候就强制写入磁盘

appendfsync no 完全取决于os,性能最好但是持久化没法保证

其中第三种模式最好。redis默认的也是采取第三种模式。

Redis持久化方案该如何选型

MongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同。MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

redis可以持久化吗

redis 数据持久化

 

1、快照(snapshots)

  缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。

数据保存的目录:

 

工作原理

Redis forks.

子进程开始将数据写到临时RDB文件中。

当子进程完成写RDB文件,用新文件替换老文件。

这种方式可以使Redis使用copy-on-write技术。

 

2、APPEND ONLY MODE(AOF)

快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,Redis就不是一个合适的选择。

Append-only文件模式是另一种选择。

你可以在配置文件中打开AOF模式:

 

选项:

  1、appendfsync no

  当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。

  2、appendfsync everysec

当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一 次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。

所以,结论就是:在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟

  • 本文相关:
  • redis的2种持久化方案深入讲解
  • redis持久化的介绍
  • 从源码解读redis持久化
  • 浅谈redis内存数据的持久化方式
  • 基于redis分布式锁的实现代码
  • redis数据库的应用场景介绍
  • redislive监控redis服务的图文教程_动力节点java 学院整理
  • redis如何实现数据库读写分离详解
  • 安装redis就那么几步,很简单
  • 图文详解windows下使用redis缓存工具的方法
  • 编译安装redisd的方法示例详解
  • centos7.5使用mysql_multi方式安装mysql5.7.28多实例(详解)
  • linux 下redis5.0.0安装教程详解
  • redis有序集合类型的常用命令小结
  • REDIS学习查看redis状态,以及rdb和aof两种持久化方案的区别
  • 持久化redis有几种方式
  • Redis持久化方案该如何选型
  • redis可以持久化吗
  • 什么是Redis持久化
  • 如何将redis中的数据持久化到数据库中
  • redis持久化是对什么
  • redis 本身有持久化,为什么还要写进 mysql
  • 刚刚问我,redis持久化数据到数据库是怎么操作的
  • redis持久化到mysql有什么思路
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页redisredis的2种持久化方案深入讲解redis持久化的介绍从源码解读redis持久化浅谈redis内存数据的持久化方式基于redis分布式锁的实现代码redis数据库的应用场景介绍redislive监控redis服务的图文教程_动力节点java 学院整理redis如何实现数据库读写分离详解安装redis就那么几步,很简单图文详解windows下使用redis缓存工具的方法编译安装redisd的方法示例详解centos7.5使用mysql_multi方式安装mysql5.7.28多实例(详解)linux 下redis5.0.0安装教程详解redis有序集合类型的常用命令小结超强、超详细redis数据库入门教程redis常用命令、常见错误、配置技redis操作命令总结redis中5种数据结构的使用场景介64位windows下安装redis教程redis中使用redis-dump导出、导入redis中统计各种数据大小的方法redis常用命令小结让redis在你的系统中发挥更大作用centos 6.6下redis安装配置记录阿里云服务器安装配置redis的方法并且加入redis分布式锁的实现方式(redis面试题)redis3.2配置文件redis.conf详细说明nosql和redis简介及redis在windows下的安redis基本类型和使用方法详解利用redis实现排行榜的小秘诀windows下redis安装配置教程浅谈redis的maxmemory设置以及淘汰策略深入理解redis分布式锁和消息队列redis数据类型及应用场景知识点总结
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved