引言

  终于可以有时间继续看书,整理自己的见解, 写下2019年第一篇自己的随笔。从去年9月份跳槽到新公司后,几乎天天的加班让整个人都盲目了,原本计划好的事情总是会被打乱。都说坚持一件事情很难,特别是写博客。确实我由于自己的懒惰以及工作的事情,导致“放弃”了三个的月随笔博文习惯,希望2019年再接再厉吧;

    由于Redis在公司的架构中使用很多,但是大部分人包括我也一开始只是停留在会部署的地步,并没有深入理解为什么那么部署,以及Redis的一些特性,今天参考了一些资料以后,做了关于Redis持久化的一个简单博文


一、什么是Redis持久化

 简单来说,就是Redis通过将数据存储于内存或者虚拟内存(也是Redis常用的技术),通过某种技术手段将数据保存于可永久保存的存储设备或媒介中,以此来保证数据完整不丢失、高速访问数据、快速恢复。

二、Redis持久化的两种方式

Redis一般通过两种方式实现持久化:快照方式(RDB模式,默认方式),日志追加方式(AOF模式)

1. 快照方式(RDB方式)

这种方式有一下几个特点,显而易见RDB方式总结起来就是一种将数据以快照方式写入二进制文件中,在间隔时间内全量写入磁盘的一个过程。它的优缺点也在一下四个特点中体现,

缺点:第一是多少间隔时间的重要性,第二是数据量大的情况下,全量写入会影响性能

优点:对于恢复操作相对比较简单,因为全量写入只需要保证一个二进制文件的恢复即可;

(1) 将内存中数据以快照的方式写入二进制文件中,默认文件名为dump.rdb

(2) 客户端使用save/bgsave命令做一次快照持久化(save操作在主线程中保存快照,Redis是用一个主线程处理所有的客户端请求,所以可能会阻塞所有的客户端请求,不推荐使用);

(4) 快照方式并不是增量数据,而是全量重新写入,数据量大的情况下会严重影响性能(主要是由于大量IO操作以及主进程不断fork()子进程去处理持久化工作)。

(5) 快照方式是间隔时间做一次,所以如果redis意外宕机的话,就会丢失最后一次快照的后的所有数据。

2. 日志追加方式(AOF持久化)

Redis会将每一个收到的写命令都通过write函数追加到文件中(默认为appendonly.aof),当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

缺点:相比较RDB而已AOF的文件相对较大(redis当AOF文件比较大时,可以重写),AOF的速度比RDB相对较慢;

优点:采用everysec配置,那么顶多损失前一秒的数据;不会像RDB那样损失很多(当然只是相对而言);

   AOF的文件没有被重写的话,比如当我们不小心FULASHALL,现在需要恢复。只需要AOF文件末尾中去掉该命令,重启Redis载入即可(即AOF文件比较容易读懂,恢复上一个状态简单)

(1) 由于OS会在内存中缓存write的修改,所以并不会立即写到磁盘上,这样可能会导致丢失部分修改,可以通过配置来实现强制OS写到磁盘时机。

    a)  appendonly yes //启用日志追加持久化方式

     b) appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

    c) appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用

    d)  #appendfsync no //完全依赖操作系统,性能最好,持久化没保证

(2)持久化的文件会越来越大,比如执行incr test命令100次,最后恢复使用set test 100就够了,但是这种方式保存了100条命令,其中99次是多余的;

(3) 为了(2)中提到的缺点,redis提供了bgrewriteaof命令:redis将内存中的数据以命令的方式保存到临时文件中,最后替换原来的持久化日志文件。

三、Redis持久化的配置

1. RDB默认方式配置:

# 时间策略:当满足每900s/300s/60s内至少1/10/10000次写操作,则会触发bgsave命令进行持久化,三个策略中只需要满足其中任何一条即可持久化
save 900 1
save 300 10
save 60 10000 # 文件名称
dbfilename dump.rdb # 文件保存路径
dir /home/redis/data/ # 如果持久化出错,主进程是否停止写入:是为了保证数据的一致性,工作进程(子进程)持久化出错后,主进程停止写入请求
stop-writes-on-bgsave-error yes # 是否压缩
rdbcompression yes # 导入时是否检查
rdbchecksum yes

  

2. AOF日志追加方式配置:

# 是否开启aof
appendonly yes # 文件名称
appendfilename "appendonly.aof" # 同步方式,上文已提到
appendfsync everysec # aof重写操作是否同步,yes则不进行同步,no则同步
no-appendfsync-on-rewrite no # 重写触发配置
auto-aof-rewrite-percentage 100 # 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。
auto-aof-rewrite-min-size 64mb # 当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。 # 加载aof时如果有错如何处理,忽略最后一条可能存在问题的指令
aof-load-truncated yes
# Redis4.0新增RDB-AOF混合持久化格式。
aof-use-rdb-preamble no

  

  

Redis持久化及其配置的更多相关文章

  1. 缓存系列之四:redis持久化与redis主从复制

    一:redis 虽然是一个内存级别的缓存程序,即redis 是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,redis支持两种不同方式的数据持 ...

  2. redis持久化以及主从服务器的配置

    作者:silenceper 日期:2013-10-03 原文地址:http://silenceper.com/archives/959.html redis 与memcached 最大的一个区别就是R ...

  3. 五、Redis持久化配置

    转载:[https://www.cnblogs.com/xingzc/p/5988080.html] Redis提供的持久化机制(RDB和AOF) Redis提供的持久化机制 Redis是一种面向“k ...

  4. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  5. redis之 Redis持久化配置

    Redis持久化配置 Redis的持久化有2种方式   1快照  2是日志 Rdb快照的配置选项 save 900 1      // 900内,有1条写入,则产生快照 save 300 1000   ...

  6. Redis实战总结-配置、持久化、复制

    Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.c ...

  7. apscheduler(定时任务) 基于redis持久化配置操作

    apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...

  8. Redis持久化 aof和rdb的原理配置

    目录 一.介绍 二.RDB持久化(全量写入) rdb原理 rdb模式 rdb触发情况 rdb优势和劣势 rdb文件配置 rdb命令配置 rdb数据恢复 三.AOF持久化(增量写入) aof原理 aof ...

  9. redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化

    redis持久化策略 1.数据文件.rdb 2.更新日志.aof 设置aof 1.命令方式config set appendonly noconfig rewrite2.配置文件方式 redis持久化 ...

随机推荐

  1. 随便写写,也有一些参考了我jio的很好的他人的成果

    Spring框架学习记录(1) 一. https://www.cnblogs.com/yuanqinnan/p/10274934.html (一)只要用框架开发java,一定躲不过spring,Spr ...

  2. Using iSCSI On Ubuntu 10.04 (Initiator And Target)

    This guide explains how you can set up an iSCSI target and an iSCSI initiator (client), both running ...

  3. Docker应用:Kubernetes(容器集群)

    阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) Docker应用:Kubernetes(容器集群) 前言: 终于出第三篇了,上个月就已 ...

  4. Webview 浏览器开源项目总结

    在Android开发中,我们不免会遇到使用WebView实现网页展示的需求,以下是本人之前star的开源项目,供大家参考: 一.CrosswalkWebview 项目地址:https://github ...

  5. django数据库连接快速配置

    DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',#数据库驱动 'NAME': 'login_db',#数据库名字 'US ...

  6. (转载)Javascript 中的非空判断 undefined,null, NaN的区别

    原文地址:https://blog.csdn.net/oscar999/article/details/9353713 在介绍这三个之间的差别之前, 先来看一下JS  的数据类型. 在 Java ,C ...

  7. PDF 报表 Java 组件 iText5 中的单位注意事项

    这里面涉及到这几个单位: 点(磅)(pt).像素(px).英寸(inch).毫米(mm) 分辨率单位有: dpi(点每英寸):出现于打印或印刷领域. lpi (线每英寸):描述光学分辨率的尺度. pp ...

  8. Spring boot 内置tomcat禁止不安全HTTP方法

    Spring boot 内置tomcat禁止不安全HTTP方法 在tomcat的web.xml中可以配置如下内容,让tomcat禁止不安全的HTTP方法 <security-constraint ...

  9. 第49节:Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  10. OAuth2.0深入理解

    1. OAuth2.0深入理解 1.1. 概念 OAuth(Open Authorization)开放授权,表示将系统功能部分授权给第三方系统调用,实现更细颗粒度的权限控制 OAuth是一种在线授权或 ...