一:什么是持久化?

    - 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. android平台的三个编译命令——make,mm,mmm

    在Android源码根目录下,执行以下三步即可编译android: 1.  build/envsetup.sh  #这个脚本用来设置android的编译环境; 2.  lunch  #选择编译目标 3 ...

  2. 再战android-语音识别1(科大讯飞)

    重新拾起刚入门的android,开发个小工具,一来不让自己离开发太远,二来看能否做出一个帮助自己管儿子学习的东西. 这次的主题是语音识别.稍微研究了下,开放的语音识别平台,本地识别的担心识别率问题,在 ...

  3. Java知多少(1) 语言概述

    Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java ...

  4. Java如何从文件中打印与给定模式匹配的所有字符串?

    在Java编程中,如何从文件中打印与给定模式匹配的所有字符串? 以下示例显示了如何使用Util.regex类的Patternname.matcher()方法从文件中打印与给定模式匹配的所有字符串. p ...

  5. Java查找出现的单词

    如何找到一个单词的每个出现? 解决方法 下面的例子演示了如何使用Pattern.compile()方法和m.group()方法找到一个词出现次数. import java.util.regex.Mat ...

  6. 超简单Windows安装Scrapy (仅需一步)

    网上很多关于windows安装Scrapy的教程都非常的繁琐,请看我给大家分享的教程,非常简单 一步完成. 超简单的安装方法: 下载地址: https://www.continuum.io/downl ...

  7. DedeCMS中channelartlist自增参数global.itemindex

    在 dede:channelartlist 标签下,使用: {dede:global.itemindex runphp='yes'} {/dede:global.itemindex} dede:cha ...

  8. [OpenCV] Install OpenCV 3.4 with DNN

    目标定位 一.开始全面支持 Tensorflow OpenCV3.4 新功能 当前最新进展OpenCV 3.4 dev:https://github.com/opencv/opencv/tree/ma ...

  9. Asp.Net Identity cookie共享

    n the Startup.Auth.cs file, add the CookieDomain parameter with your domain: var cookieAuthenticatio ...

  10. 利用python对微信自动进行消息推送

    from wxpy import * #该库主要是用来模拟与对接微信操作的 import requests from datetime import datetime import time impo ...