一、持久化

计算机的数据有两种状态:

1)持久态:如硬盘上的数据

2)瞬时态:如内存当中的数据

持久化就是将瞬时数据转换为持久数据的一个过程,但注意持久化并不意味的数据永远存在,针对不同的持久化,数据的生命周期也是不同的。比如,一次session会话中session容器中的的持久化,如果容器销毁该生命周期也就结束。

二、redis的持久化策略

redis是一个基于内存的数据库,但它也提供了持久化策略,分为两种:

1)RDB

2)AOF

redis默认采用rdb策略,你可以选择使用其中一种,也可以两种同时使用。如果两者同时使用的化,需要注意避免同时比较耗资源的I/O操作,不过一般上使用一种即可,或者使用默认策略。

RDB策略:

  简单来说,它就是采用定时生成快照的方式(rdb格式文件),比如:每小时保存一次,每天保存一次。这种策略非常方便地用来做数据备份。根据你的备份数据,你可以简单的把redis还原到任何你备份的版本。

AOF策略:

  AOF于RBD不同,它并不存储数据,而是将命令写入到日志当中,在系统重启的时候,通过重新执行日志中的命令构建数据。  

三、RDB/AOF优缺点

RDB优点:

  1)由于RDB将数据持久化,你可以在遇到问题时候轻松地恢复数据

  2)RDB的持久化是通过启动一个子线程来执行I/O的,不会阻塞当前线程。

  3)在redis重启的时候,如果数据较大,采用rdb方式比较快速。

RDB缺点:

  1)由于定时策略,那么如果redis遇到问题,很有可能丢失最新的数据。由于RDB数据都集中在一个文件,如果文件损坏,那么数据损失几乎是灾难性的。

  2)RDB会启动一个线程去持久化数据,但是如果数据量很大,那么可能会由于如超时,CPU性能不足等问题出现停止执行的情况。虽然这点上AOF也是启动一个线程去处理,但是你可以调整日志的写入频率来缓解这种问题。

AOF优点:

  1)AOF策略相对更加的耐用,你可以配置不同的持久化形式比如:每秒一次、每次key变化、或完全不持久化。其实即使每秒一次,它的性能也是很不错的,并且你最多只会丢失一秒钟的数据。

  2)AOF是采用附加到日志的方式,所以它不会出现如断电导致数据损坏的情况。即使在写入日志的过程中断电,也可以轻易地通过redis-check-aof工具来解决。

  3)如果日志文件越来越大,redis会自动生成新的文件,然后切换并写入到新的文件当中。

  4)日志文件的格式是非常简单易懂的,你甚至可以停止redis更改日志中的命令,然后再重新启动。

AOF的缺点:

  1)相同的数据集,AOF所占用的空间明显大于RDB文件。

  2)AOF写入频繁,I/O的频率对于RDB来说更高,性能上自然会略低。

  3)有一些特定的命令会导致AOF出现问题,当然redis不断的迭代会相应的解决一些问题。但RDB明显不会出现这些问题。

四、如何使用

1)快照

你可以在redis.conf配置快照的生成策略,如:

save 60 1000

60秒如果有1000个key发生变化。如果要关闭快照,可以注释掉该配置

RDB执行过程:启动一个子线程去生成RDB临时文件,这个临时文件生成完毕以后会替换旧的文件。

2)Append-only file

你只需要在redis.conf中将它开启即可(修改为yes)

appendonly yes

你也可以配置日志写入频率:

1)always 每当有变化

2) seconds 每秒钟

3) no 不写入

AOF执行过程:子线程去重写一个临时文件,当重写完毕,父线程会把缓冲区的新命令写入到临时文件的尾巴,然后替换旧的文件。(这里注意,在子线程重写的过程中,父线程会将新命令写入缓冲区、也会写入旧文件,这样即使子线程重写失败,旧文件依然完整)

五、备份恢复

无论采用RDB策略还是AOF策略,最终都会生成文件本地文件,而备份和恢复其实就是将完整的本地文件进行备份,通过加载备份文件来恢复数据。

redis(5)持久化的更多相关文章

  1. Redis总结(四)Redis 的持久化

    前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来 ...

  2. Redis的持久化的两种方式drbd以及aof日志方式

    redis的持久化配置: 主要包括两种方式:1.快照  2 日志 来看一下redis的rdb的配置选项和它的工作原理: save 900 1 // 表示的是900s内,有1条写入,则产生快照 save ...

  3. redis启用持久化

    redis的持久化有rdb和aof两种. rdb是记录一段时间内的操作,一盘的配置是一段时间内操作超过多少次就持久化. aof可以实现每次操作都持久化. 这里我们使用aof. 配置方式,打开redis ...

  4. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

  5. Redis笔记(八)Redis的持久化

    Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效. Redis的持久化主要有快照Snapshot ...

  6. 深入剖析 redis AOF 持久化策略

    本篇主要讲的是 AOF 持久化,了解 AOF 的数据组织方式和运作机制.redis 主要在 aof.c 中实现 AOF 的操作. 数据结构 rio redis AOF 持久化同样借助了 struct ...

  7. 深入剖析 redis RDB 持久化策略

    简介 redis 持久化 RDB.AOF redis 提供两种持久化方式:RDB 和 AOF.redis 允许两者结合,也允许两者同时关闭. RDB 可以定时备份内存中的数据集.服务器启动的时候,可以 ...

  8. redis 数据持久化

    1.快照(snapshots) 缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb.你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据 ...

  9. redis的持久化之AOF

    AOF Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中. AOF 则以协议文本的方式,将所有对数据库进行过写入的命令 ...

  10. redis的持久化方式RDB和AOF的区别

    1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...

随机推荐

  1. 爬虫开发14.scrapy框架之分布式操作

    分布式爬虫 一.redis简单回顾 1.启动redis: mac/linux:   redis-server redis.conf windows: redis-server.exe redis-wi ...

  2. Mysql内置功能《三》视图

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  3. easyui页面上显示和PL/SQL编码问题

    在页面上,只需要显示人们看的懂的文字就行,但是在数据库里面就不一定了,一般情况下,在数据库里面存字母,数字等除了汉字以外的字符,存汉字有个问题,就是有时候不同oracle数据库的客户端会出现乱码问题: ...

  4. PyQt5(4)——菜单栏(使用外部exe)

    图像化建立菜单栏: ① 双击输入名称 就可以喽 如何添加工具栏呢: 新建一个快捷工具,拖到快捷栏,出现红色的小竖线. 至此 就完成了菜单栏和快捷方式的建立. 补充: python   如何调用外部的e ...

  5. kaggle kernel使用指南

    有几个要注意的地方: 1.可以选择CPU或GPU,但是机器学习模型一般的CPU就够了,最近(2019.04)使用GPU的话一小时后总是会断开连接,这时候要跑久一点的cell就凉了. 2.导入文件:支持 ...

  6. java中锁

    s锁的作用是就是保证线程安全,但是从另外成都讲影响了效率: 1 synchronized关键字 这个是虚拟机底层实现的, java中的关键字,内部实现为监视器锁,主要是通过对象监视器在对象头中的字段来 ...

  7. GTP

     GPRS隧道协议(GPRS Turning Protocol) GTP是一个高层协议,位于TCP/IP或UDP/IP等协议上,提供主机间端到端通信, 通过隧道标志(TEI)在路径协议上复用  GTP ...

  8. Pytorch学习笔记(二)——Tensor

    一.对Tensor的操作 从接口的角度讲,对Tensor的操作可以分为两类: (1)torch.function (2)tensor.function 比如torch.sum(a, b)实际上和a.s ...

  9. 关于浏览器localhost点击wamp项目跳转出错

    www目录下index.php399行代码 $handle=opendir("."); $projectContents = ''; while (($file = readdir ...

  10. vue移动端更改手机物理按键返回问题

    又是一天见面的日子,春季盎然~ 已经无法在继续抒情下去了,写作水平骤降!! 今天记录下应用cordva+vue生成的apk 在手机物理返回时遇到的问题: 前提说~~应用vue,我们可以自定义上一路径和 ...