当前位置: 首页 > news >正文

Redis持久化方式

已订正

1. Redis 提供了不同级别的持久化方式:

  • RDB(Redis DataBase)持久化:Redis 可以通过创建快照来存储内存里面的数据在某个时间点上的副本到本地数据库中,如果系统,Redis或者硬件其中之一崩溃,那么Redis将丢失最近一次创建快照之后写入的所有数据.
  • AOF(Append Only File)持久化:AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化.它可以做到每秒一次的频率对AOF文件进行同步.
  • 不持久化:如果你只希望数据在服务器运行的时候存在,你也可以不使用任何持久化方式
  • RDB+AOF模式 :在这种情况下, 当Redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

2. RDB的优点,和缺点

优点:RDB是一个非常紧凑的文件,它保存了某个时间点的数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集.与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.

缺点:如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合你.因为RDB更容易丢失数据.虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,你通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,你可能会丢失几分钟的数据.RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.

3. AOF优点和缺点

优点:使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据.

缺点:对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积.根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB .

4. 如何选择持久化方式

RDB 持久化恢复数据集的速度要比AOF快一点,但是容易丢失更多的数据.AOF可以在每秒进行一次记录,如果发生系统崩溃最多丢失1秒的数据,更加可靠.但是它AOF文件比较大,恢复速度要慢一点.

如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化.有很多用户都只使用 AOF 持久化,但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快一般来说,如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能.

1. 快照与备份有什么区别?link

一句话答案:快照记录逻辑地址和物理地址的对应关系;备份则是数据存储的某一个时刻的副本.这是两种完全不同的概念.

2. 内部存储与外部存储的区别:link

内部存储:

内部存储不是内存,而是一个位于系统中很特殊的一个位置.放入内部存储中的数据一般都只能被你的应用访问到,且一个应用所创建的所有文件都在应用包名相同的目录下,即/data/data/packagename.创建于内部存储的文件,是与这个应用关联起来的.当一个应用被卸载后,内部存储中的这些数据也被删除.

外部存储:

最容易混淆的是外部存储,如果说pc上也要区分出外部存储和内部存储的话,那么自带的硬盘算是内部存储,U盘或者移动硬盘算是外部存储,因此我们很容易带着这样的理解去看待安卓手机,认为机身固有存储是内部存储,而扩展的T卡是外部存储.

相关文章:

  • Redis哨兵(Sentinel)模式
  • 倾斜的PDF页面怎样通过PDF Transformer+修正
  • 谈谈你对 MVC 模式的理解?
  • 将SSH移植到arm soc上
  • SpringMVC 的工作原理/执行流程?
  • 进程详解(1)——可能是最深入浅出的进程学习笔记
  • SpringMVC 的核心组件有哪些?
  • Iaas-cloudstack概念
  • SpringMVC 常用的注解有哪些?
  • Thrift开发示例
  • @RequestMapping 的作用是什么?
  • 小奇的糖果(candy)
  • 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
  • 修饰符与关键字
  • bootstrap 入门
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CentOS7 安装JDK
  • echarts的各种常用效果展示
  • express.js的介绍及使用
  • Java 内存分配及垃圾回收机制初探
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript 一些 DOM 的知识点
  • JS函数式编程 数组部分风格 ES6版
  • laravel 用artisan创建自己的模板
  • node-glob通配符
  • Otto开发初探——微服务依赖管理新利器
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 2.3、2.4 知识点小结
  • 阿里云Kubernetes容器服务上体验Knative
  • 服务器从安装到部署全过程(二)
  • 关于List、List?、ListObject的区别
  • 力扣(LeetCode)22
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端面试之闭包
  • 微信小程序填坑清单
  • 从如何停掉 Promise 链说起
  • ###C语言程序设计-----C语言学习(3)#
  • %check_box% in rails :coditions={:has_many , :through}
  • (07)Hive——窗口函数详解
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (ZT)出版业改革:该死的死,该生的生
  • (第二周)效能测试
  • (二)springcloud实战之config配置中心
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (九)c52学习之旅-定时器
  • (十三)Flask之特殊装饰器详解
  • (四) 虚拟摄像头vivi体验
  • (五)关系数据库标准语言SQL
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...