一:什么是持久化?

    - Redis 是内存级别的数据库。所谓持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)中。

  - 可以持久读取操作等的数据。

  - Redis 支持 RDB/AOF 的持久化方式

二:RDB 持久化

  - 本质

    - 通过 快照 方式来进行持久化。

  - RDB 配置

    • ################################ SNAPSHOTTING  #################################
      # 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
      # Save the DB on disk:
      #
      # save <seconds> <changes>
      #
      # Will save the DB if both the given number of seconds and the given
      # number of write operations against the DB occurred.
      #
      # 满足以下条件将会同步数据:
      # 900秒(15分钟)内有1个键被更改
      # 300秒(5分钟) 内有10个键被更改
      # 60秒 内有10000个键被更改
      # Note: 可以把所有“save”行注释掉,这样就取消同步操作了
      # 因为 RDB 只做后备使用,建议只在 slave 下进行, 15 分钟同步一次就可以,也就是说只保留 save 900 1 这个设置 save
      save
      save # 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
      rdbcompression yes # 指定本地数据库文件名,默认值为dump.rdb
      dbfilename dump.rdb

  - RDB 相关命令

    - 手动执行 SAVE / BGSAVE 生成快照。

      - 在执行 SAVE 时, Redis会同步执行快照,同时堵塞其他客户端命令,所以要避免在生产环境中直接使用。

      - 手动快照推荐 BGSAVE ,后台执行,对其他客户端无影响。

      - 执行 LASTSAVE 可以查看最近一次快照的时间戳。

  - 原理

    - Redis 在执行快照时使用 fock 函数复制一份当前进程(父进程)的副本(子进程);

    - 父进程继续接受客户端请求,子进程写入。

    - 子进程写入完成之后,用临时文件替换旧的 RDB 文件,一次快照完成。

三:AOF 持久化

  - 基本概念

    - Redis 默认是不开启 AOF 持久化的。

  - AOF 配置

    • # 配置 appendonly 开启 AOF 持久化
      appendonly yes
       
      # AOF 持久话文件名名称
      appendfilename “appendonly.aof"
       
      # AOF 持久化策略
      #     always 每次写入同步(最安全/慢)
      #     everysec 默认。每秒异步同步一次,如果一秒钟内宕机,有数据丢失
      #     no 将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的
      appendfsync always
       
      # rewrite 重写日志
      #     重新整理 AOF 日志。
      #     在 rewrite 结束之后,rewrite产生的新数据会导致文件的I/O,所以硬盘足够的情况下,应该减小重写次数,默认大小可以设置到 5G 以上
      auto-aof-rewrite-percentage 100 // 大于上次重写的百分比
      auto-aof-rewrite-min-size 64mb // 允许重写的最小

四:AOF / RDB 相关

  - RDB与AOF同时开启  默认先加载AOF的配置文件

  - 相同数据集,AOF文件要远大于RDB文件,恢复速度慢于RDB

  - AOF运行效率慢于RDB,但是同步策略效率好,不同步效率和RDB相同

五:应用场景

  - 备份

    - 对数据一致性有要求的请使用 AOF

    - 当数据量大,且对恢复速度有要求,并且数据的一致性要求不高的话,可以只使用RDB

  - 只做缓存

    - 不用开启任何的持久化方式

《Redis 持久化》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯

    实验原理: STM32的定时器有PWM功能,iCore4的蓝色LED连接在定时器的输出接口上, 可以通过定时器的PWM输出控制LED的亮度,从而实验呼吸灯的功能. 核心代码: int main(voi ...

  2. 牛客网_Go语言相关练习_判断&选择题(5)

    一.判断题 defer应该在if后面,如果文件为空,close会崩溃. package main import ( "os" "fmt" ) func main ...

  3. 5 -- Hibernate的基本用法 --5 2 持久化对象的状态

    1. 瞬态 : 对象有new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态.瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识.如果程序中失去了瞬态对象的引用,瞬态 ...

  4. C#日志记录设计与实现(BenXHLog)

    C#日志记录设计与实现 日志记录: 日志记录在程序设计开发过程中,是非常重要的,可以供调试和记录数据,虽然说有开源的强大日志管理系统,比如apache的Log4Net,功能可谓强悍,但是有时候,不需要 ...

  5. 网页使用思源字体 CSS

    在知乎上再次看到这门字体的提问,想想中文字体过得多么艰辛,中文软件过得多么艰辛. 思源字体 2014年7月,Adobe与Google宣布推出一款新的开源字体思源黑体, 有七种字体粗细(ExtraLig ...

  6. Spring Boot 集成 Redis 实现缓存机制

    本文章牵涉到的技术点比较多:spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对以上这些技术点有一定的了解或者也可以先看看这篇文章 ...

  7. thinkphp或thinkcmf 《文章编辑,文章添加》 访问另一个表的分类,添加入另一个表时将id值以(,)逗号分隔储存,编辑时以(,)逗号分隔并且相等的id值被选中

      首页 显示 的控制器//网贷评级 public function grade(){ $archives = $this->archives_model->where(array('de ...

  8. is7.5和iis8文件上传大小限制30M修改方法

    C:\Windows\System32\inetsrv\config\schema\ 下的IIS_schema.xml文件,但是考虑到安全等问题,而且这个文件默认是只读的,所以不建议直接修改这个配置文 ...

  9. 7.26-STOIRegularMatch-08-#14

    A-3 SRM 08 描述 给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T. 这里的出现定义为存在一串下标 ,满足  且 . 输入格式 一行,一个 01 串 输出格式 一行,字母 ...

  10. 终于知道什么情况下需要实现.NET Core中的IOptions接口

    自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口. 微软有的项目中实现了,比如 Caching 中的 MemoryCacheOpti ...