redis持久化

redis的数据存在内存中,所以存取性能好。但是存在内存中的数据存在一个问题,一旦机器重启,内存数据消失。为了解决这个问题,redis支持持久化。持久化就是为了解决内存数据丢失时恢复数据的,而不是为了将暂时不用的数据转移到硬盘。

redis存储数据达到内存上限时,再也存不进去数据的,会报错。实际生产环境中,我们最好保证数据最大量不超过内存的上限的一半。这个理由后面会讲到。

缓存穿透:某个不存在的值被频繁请求,缓存不存在,请求数据库,数据库中也不存在,每次都去请求数据库。

缓存雪崩:所有的缓存都失效了。

持久化可以理解为就是把内存数据副本存在硬盘中,这样内存数据丢失时可以从硬盘中恢复。

redis支持两种方式的持久化,RDB(内存快照)和AOF(日志追加)。RDB也可理解为半持久化,也是redis默认的持久化方式。AOF的持久化更好,但是对性能有影响。实际生产中是两种方式并用。

VM虚拟内存已经不再推荐,严重影响性能

1 :RDB 内存快照

RDB称为内存快照,将内存中的数据快照按照我们设定的配置周期性的写入硬盘。

原理:

1. redis调用fork,现在有了子进程和父进程。
2. 父进程继续处理client请求,(不阻塞)子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照。(如果在整个子进程将数据写入硬盘过程中,无任何写请求,那么父子进程共享 内存数据。一旦有写操作,会copy一份副本。如果copy了一份副本,那么将占用双倍的内存,这就是为什么生产环境中力求数据量不超过内存一半的原因)

3. 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出(fork一个进程入内在也被复制了,即内存会是原来的两倍)。

save和bgsave命令也会触发RDB,进行持久化。save命令启用主进程进行持久化,期间会阻塞客户端请求,用得少。bgsave命令会启用子进程进行持久化,和上面的原理一样。

RDB持久化会丢失上次备份到奔溃这段时间内的数据,用来做冷备份还是不错的。如果想获得更好的持久性,AOF更合适。但是AOF得性能要差一些

2 :AOF 日志追加  默认不开启

AOF会把redis服务器的每一次写操作写入appendonly.aof文件中,这个文件存在硬盘中。如果内存失效,redis服务器会从这个文件中读取命令,进行恢复。操作系统本身的缓存机制使得appendonly.aof的追加不会立即写入硬盘,重启时也会丢失部分修改写操作。通过redis配置可以强制将缓存立即写入硬盘。

aof方式会使得.aof文件越来越大。通过配置,可以定期的对.aof文件进行重写。命令bgrewriteaof,可以对aof文件进行重写。

下面是重写.aof文件的原理,而不是日志追加的原理。日志追加就是往.aof文件末尾追加。

1.  redis调用fork ,现在有父子两个进程
       2. 子进程根据fork时刻内存中的数据库快照,往临时文件中写入重建数据库状态的命令(也遵守写时复制)
       3. 父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来。这样就能保证如果子进程重写失败的话并不会出问题。
       4. 当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
       5. 现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。

一般对redis做主从同步,主机不开启任何持久化策略,保证最好的性能。而在从机上进行持久化,持久化采用两种策略结合的方式

redis持久化机制的更多相关文章

  1. 浅谈:Redis持久化机制(一)RDB篇

    浅谈:Redis持久化机制(一)RDB篇 ​ 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...

  2. 浅谈:Redis持久化机制(二)AOF篇

    浅谈:Redis持久化机制(二)AOF篇 ​ 上一篇我们提及到了redis的默认持久化方式RDB,是一种通过存储快照数据方式持久化的机制,它在宕机后会丢失掉最后一次更新RDB文件后的数据,这也是由于它 ...

  3. 北京大公司二面:了解Redis持久化机制吗?

    今日总结 Redis持久化机制:RDB和AOF RDB持久化:定时任务,BGSAVE命令 fork一个子进程生成RDB文件(二进制) AOF持久化:根据配置将写命令存储至日志文件中,顺序写&& ...

  4. Redis 持久化机制

    1.背景 之前在使用redis 时候,没有过多的考虑持久化! 但是这样即使你用了redis 也是徒劳,表面上你是用上了redis 进行缓存数据,感觉已经给自己的架构添加了一个道QPS 防护墙! 哈哈, ...

  5. 细说Redis持久化机制

    概述 Redis不仅能够作为缓存来使用,也能够作为内存数据库. Redis作为内存数据库使用时.必需要解决一个问题:数据的持久性.有些将Redis作为缓存使用的场景也需要将缓存的数据持久化到存储介质上 ...

  6. redis持久化机制【十三】

    一.Redis提供了哪些持久化机制: redis的高性能是因为其所有数据都存在了内存中 ,为了使redis在重启之后数据仍然不丢失,需要将数据同步到硬盘中,这一过程就是持久化. redis支持两种方式 ...

  7. Redis持久化机制,优缺点,如何选择合适方式

    一.什么是Redis持久化? 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失. 二.Redis 的持久化机制是什么?各自的优缺点? Redis 提供两种持久化机制 RDB(默认) 和 ...

  8. Redis持久化机制 RDB和AOF的区别

    一.简单介绍 Redis中的持久化机制是一种当数据库发生宕机.断电.软件崩溃等,数据库中的数据无法再使用或者被破坏的情况下,如何恢复数据的方法. Redis中共有两种持久化机制 RDB(Redis D ...

  9. 源码级别理解 Redis 持久化机制

    文章首发于公众号"蘑菇睡不着",欢迎来访~ 前言 大家都知道 Redis 是一个内存数据库,数据都存储在内存中,这也是 Redis 非常快的原因之一.虽然速度提上来了,但是如果数据 ...

随机推荐

  1. 每天一个linux命令(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  2. js高程读书笔记(1-3章)

    一.js简介 js是一种专为与网页交互而设计的脚本语言,由以下三个不同的部分组成: 1.ECMAScript,由ECMA-262(它规定了语言的这些组成部分:语法,类型,语句,关键字,保留字,操作符, ...

  3. 《BI那点儿事》数据挖掘的主要方法

    一.回归分析目的:设法找出变量间的依存(数量)关系, 用函数关系式表达出来.所谓回归分析法,是在掌握大量观察数据的基础上,利用数理统计方法建立因变量与自变量之间的回归关系函数表达式(称回归方程式).回 ...

  4. Razor基本语法

    前言: Razor引擎的核心是识别@符号及尖括号:    1.<...></...>    2.<.../>    [之所以说是"尖括号"而非& ...

  5. HT for Web可视化QuadTree四叉树碰撞检测

    QuadTree四叉树顾名思义就是树状的数据结构,其每个节点有四个孩子节点,可将二维平面递归分割子区域.QuadTree常用于空间数据库索引,3D的椎体可见区域裁剪,甚至图片分析处理,我们今天介绍的是 ...

  6. 语义化HTML:ul、ol和dl

    一.语义化元素   1. ul标签 W3C草案: The ul element represents an unordered list of items; that is, a list in wh ...

  7. SQL--类型转换

    Convert函数和Cast函数都是转化函数,效果是一样的. cast函数,转化,如果转化之后,年龄还是Null的话,就显示为“未知” Convert函数和Cast函数都是转化函数,效果是一样的.

  8. 自己封装的JS分页功能[用于搭配后台使用]

    * 2016.7.03 修复bug,优化代码逻辑 * 2016.5.25 修复如果找不到目标对象的错误抛出. * 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bu ...

  9. 15天玩转redis —— 第八篇 你不得不会的事务玩法

    我们都知道redis追求的是简单,快速,高效,在这种情况下也就拒绝了支持window平台,学sqlserver的时候,我们知道事务还算是个比较复杂的东西, 所以这吊毛要是照搬到redis中去,理所当然 ...

  10. IOS中Json解析的四种方法

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...