redis持久化快速回忆手册

Redis提供的持久化机制:

1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。

2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

3). 无持久化:我们可以通过配置的方式禁用Redis服务器的持久化功能。

4). 同时应用AOF和RDB。

快照(RDB)默认持久化方式

  将内存中数据以快照的方式写入二进制文件中,默认文件名为dump.rdb。可以通过配置设置redis服务器自动做快照持久化的方式。我们可以配置redis在n秒内如果超过了m个修改就自动做快照。

snapshotting默认设置:
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
save 60 10000

  对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,子进程将快照数据写入到临时RDB文件中,当子进程完成数据写入操作后,再用临时文件替换老的文件,这样就可以极大的避免服务进程执行IO操作了。每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步增量数据。所以如果数据量大的话,写操作会比较多,必然会引起大量的磁盘IO操作,可能会严重影响性能。

  注意:快照方式是在一定间隔时间做一次,如果redis意外宕机,就会丢失最后一次快照后的所有数据的修改。

  对于灾难恢复而言,我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。

  由于RDB是通过fork子进程来协助完成数据持久化工作的,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

日志追加方式(append-only file:aof)方式

  redis会将每一个收到的命令都通过write函数追加到命令中,当redis重新启动时会重新执行文件中保存的写命令来在内存中重建这个数据库的内容,这个文件在bin目录下:appendonly.aof。当然由于操作系统会在内核中缓存write做的修改,所以可能不是立即写到磁盘上,这样的持久化还是有可能丢失部分修改。但是可以通过配置文件告诉redis通过fsync函数强制操作系统写入到磁盘的时机。

aof设置:
appendonly yes //启动aof持久化方式有三种修改方式
#appendfsync always //收到写命令就立即写入到硬盘,效率最慢,但是保证完全持久化
#appendfsync everysec //每秒种就写入一次硬盘,在性能和持久化方面做了折中
#appendfsync no //完全依赖操作系统,性能最好,但是持久化没保证,不知道何时持久化

  事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。

  由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-

如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。

  对于相同数量的数据集而言,AOF文件通常要大于RDB文件。日志追加的方式导致持久化文件会变得越来越大。例如调用incr intsmaze命令100次,文件中就保存了100条命令,其实有99条都是多余的。因为要恢复数据库状态其实文件中保存一条set intsmaze 100就可以了。为了压缩这种持久化方式的日志文件,redis提供了bgrewriteaof命令。收到此命令redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的持久化日志文件。

  实际中使用always方式,开启了always方式,redis的并发量就会下去。实际生产中都不会用快照的方式。

Redis的数据备份:

在Redis中我们可以通过copy的方式在线备份正在运行的Redis数据文件。这是因为RDB文件一旦被生成之后就不会再被修改。Redis每次都是将最新的数据dump到一个临时文件中,之后在利用rename函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻copy数据文件都是安全的和一致的。鉴于此,我们就可以通过创建cron job的方式定时备份Redis的数据文件,并将备份文件copy到安全的磁盘介质中。

原文和作者一起讨论: http://www.cnblogs.com/intsmaze/p/6818210.html

微信:intsmaze

时间: 2024-10-06 22:48:13

redis持久化快速回忆手册的相关文章

redis持久化详解

redis是一个支持持久化的内存型数据库, 由于是在内存中,即使有主从,数据冗余备份,也难保数据丢失, redis持久化就是解决这个问题. redis持久化,是通过把内存里的数据同步到磁盘上来保证持久化. redis有两种持久化方式 一种是快照,snapshotting,也是默认方式,还有一种是只追加文件,缩写aof(apppend-only-file). 快照(snapshotting):将某一时刻的所有数据都写入硬盘. 只追加文件(AOF):在执行写命令时,将被执行的写命令复制到硬盘里. s

Redis持久化——问题定位与优化(三)

核心知识点: 1.fork操作 a.在RDB或AOF重写时,会执行fork操作创建子进程,fork操作是一个重量级操作. b.改善fork操作耗时的手段:避免使用Xen.配置Redis实例最大使用内存.合理配置Liunx内存使用技术.降低fork操作的频率. 2.子进程开销监控与优化 1).CPU 2).内存 3).硬盘 3.AOF追加阻塞 Redis持久化功能一直是影响Redis性能的高发地,下面我们结合常见的持久化功能问题进行分析定位和优化. 一.fork操作 当Redis做RDB或AOF重

精讲Redis持久化

前言 在上一篇文章中,介绍了精讲Redis内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识--持久化.复制(及读写分离).哨兵.以及集群. 一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%.99.99%.99.999% 等等).但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离.快速

redis持久化说明

摘自:https://www.toutiao.com/a6584194392104370692/?tt_from=weixin&utm_campaign=client_share&timestamp=1533093100&app=news_article&utm_source=weixin&iid=39271855323&utm_medium=toutiao_android&wxshare_count=1 感谢文章的所有者 一.Redis高可用概述

深入Redis持久化

一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%.99.99%.99.999% 等等).但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离.快速容灾技术),还需要考虑数据容量的扩展.数据安全不会丢失等. 在Redis中,实现高可用的技术主要包括持久化.复制.哨兵和集群,下面分别说明它们的作用,以及

NoSQL数据库之redis持久化存储(一)

第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务软件很像,但是redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和sorted sets(有序集合)等. 这些数据类型支持push/pop,add/remove及取交集,并集和差集及更丰富的操作,而且这些操作

Redis持久化的方式有哪些?优缺点分别是什么?

Redis持久化方式        持久化的目的主要是做灾难恢复,数据恢复.由于Redis的数据全都放在内存里面,如果Redis挂了,没有配置持久化的话,重启的时候数据会全部丢失. 突然间,大量的请求过来,缓存全都无法命中,造成缓存雪崩,mysql无法承载大量的请求,造成整个系统崩溃.如果把Redis持久化做好,即使Redis故障了,也能够立即重启,对外提供服务. Redis持久化分为两种: RDB持久化: 在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数

redis 持久化有几种方式?

面试题 redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 面试官心理分析 redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据就全部都弄丢了啊.你必须得用 redis 的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件里,进行持久化. 如果 redis 宕机重启,自动从磁盘上加载之前持久化的一些数据就可以了,也许会丢失少许数据,但是至少不会将所有数据都弄丢. 这个其实一样,针对的都是 redi

Redis持久化

Redis持久化功能简介: Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边. 数据保存到硬盘的过程就称为“持久化”效果. Redis持久化的两种方式:snap shotting  快照持久化  /  append only file   AOF持久化 snap shotting快照持久化 该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行