一:什么是持久化?

    - 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. Python3自定义http/https请求拦截mitmproxy脚本

    [本文出自天外归云的博客园] 脚本内容 代码如下: from mitmproxy import http, ctx from multiprocessing import Lock class Fil ...

  2. Java compiler level does not match the version of the installed Java project facet解决办法

    意思就是project facet 和 java compiler level 不一致 解决办法: 修改project facet 方法一: 选中工程,右键 Property -> Projec ...

  3. 决策树1 -- ID3_C4.5算法

    声明: 1.本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用.欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记,因此为 ...

  4. 【emWin】例程十三:字库放到外部存储器

    介绍: 本例将字库文件放到SD卡中,通过读取SD卡中的字库文件在液晶上显示文字.   实验指导书及代码包下载: 链接:http://pan.baidu.com/s/1bo0yTLd 密码:i4sm   ...

  5. Java多线程系列——线程池简介

    什么是线程池? 为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用.用线程时从线程池中获取,用完以后不销毁线程,而是归还给线程池. JDK 对线程池的支持 为了更好的控制多线程,JDK 提 ...

  6. PHP最全笔记(三)(值得收藏,不时翻看一下)

    /* [数组函数] *///统计计算count        计算数组中的单元数目或对象中的属性个数array_count_values  统计数组中所有的值出现的次数array_product    ...

  7. nginx负载均衡一:基础知识

    基础信息 nginx 的 upstream目前支持 4 种方式的分配  1).轮询(默认)  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.  2).weight ...

  8. 【QT】QT下载与安装

    很简单 1.下载地址 http://download.qt.io/archive/qt/ 学个单词,archive. 选择一个版本下载,5.9.3. 2.安装 选择组件 MinGW就行了,MinGW- ...

  9. 条件变脸pthread_cond_signal丢失问题

    直接上代码: static bsem_t bsem; void* t1(void *arg) { /*printf("enter task 1\n");*/ /*while(1)* ...

  10. css3整理--background-size

    background-size语法: /*Mozilla*/ -moz-background-size: auto || <length> || <percentage> || ...