`

redis 持久化

 
阅读更多

 

Redis有两种持久化方案,RDB(Redis DataBase)和AOF(Append Only File)

 

一、RDB

redis的RDB方案是一种快照方式持久化,就是在某时刻把所有数据进行完整备份。RDB是redis默认的持久化方案,它的作用是一旦在指定的时间间隔内,执行指定次数的写操作,redis服务会将内存中的数据写入磁盘中,默认是写入/var/lib/redis/dump.rdb 文件,redis重启会通过加载dump.rdb文件恢复数据

从配置文件了解RDB

打开 /etc/redis.conf 文件,找到SNAPSHOTTING部分内容

################################ SNAPSHOTTING  ################################
#   save <seconds> <changes>
# 下面第一行的意思是如果900内至少有一个键被改动,自动进行数据保存,若不想使用RDB持久化可以把所有
#save配置注释掉,或者添加一行 save ""
save 900 1
save 300 10
save 60 10000

# 若redis最近一次持久化到dump文件出错,则默认不允许进行写操作,改成no则无视持久化错误允许写操作
stop-writes-on-bgsave-error yes

# 压缩dump持久化文件,改成no不压缩文件会变大很多,不过能节一点cpu,建议使用默认值yes
rdbcompression yes

#持久化文件校验,会消耗一些性能,建议使用默认值yes
rdbchecksum yes

# RDB持久化文件名
dbfilename dump.rdb

# 持久化文件存储目录,即dump文件所在目录,aof文件也会放在这个目录下
dir /var/lib/redis

触发RDB快照的几种方式

save         此命令是同步命令,在持久化时会阻塞所有客户端请求

bgsave     异步命令,会生成一个子进程将内存数据保存到dump文件,不影响主进程服务。通过配置文件save属性触发的持久化也是通过bgsave方式保存,新建进程会消耗内存

flushall     此命令在清空redis数据后会进行持久化操作

shutdown  使用shutdown命令会先进行持久化操作再关闭服务

优缺点

优点:

  紧凑的单一文件,适用于灾难恢复

  与aof相比,在恢复大的数据集时,RDB方式会更快

缺点:

  RDB需要经常生成子进程来进行数据持久化,耗时、耗性能

  数据完整性不高,根据配置,一旦发生redis意外宕机可能会丢失几分钟的数据

 

二、aof

redis的aof备份是一种写日志方式持久化,就是将用户所有的写指令备份到文件中,还原数据时会将所有指令重新执行一遍。redis默认不开启aof,redis中RDB和aof两种持久化方式能同时使用

aof重写

因为aof的运作方式是不断将命令追加至文件的末尾,随着写入命令的不断增加,aof文件体积会变得越来越大。比如,对一个计数器调用了100此incr,那仅仅为了保存一个值aof文件就需要使用100条记录。这样不止会造成aof文件体积过大,还会导致数据恢复时速度太慢。而实际上只用一条set命令就足以保存计数器当前值了。

为了处理这种情况redis支持bgrewriteaof重写命令,用于异步执行aof文件重写操作,上面的100条记录变成1条。它会创建一个当前aof文件的优化版本,而即使bgrewriteaof执行失败,也不会有任何数据丢失,因为旧的aof文件在bgrewriteaof成功之前不会被修改。redis在一定条件下会自发进行重写,也可以调用bgrewirteaof命令主动重写

从配置文件了解aof

打卡/etc/redis.conf 文件,找到 APPEND ONLY FILE 部分

# 为了解决RDB一致性问题而生,默认不开启
appendonly no

#保存文件名
appendfilename "appendonly.aof"

# aof实际上是调用fsync()让系统将内存中数据保存到磁盘上,有些系统会立即保存,有些系统只能做到“尽可能快”保存
#redis支持三种模式来调用fsync():
#no: 不调用,系统按自己步调保存内存数据到磁盘
#always:每一次写操作都调用
#everysec: 每秒调用一次
# appendfsync always
appendfsync everysec
# appendfsync no

# aof的fsync虽然是一个单独线程,但是它还是会阻塞redis的同步写操作,而RDB的bgsave和aof的bgrewriteaof(重写,从后面了解)
# 会占用大量的I/O,是fsync阻塞住,那就意味着阻塞同步写操作。下面属性意思是不在bgsave或bgrewriteaof时
# 调用async,如果填yes最坏情况有可能导致丢失30秒的日志。为了数据一致性默认填no

no-appendfsync-on-rewrite no

#下面两个用于配置自动重写的触发条件。只有两个条件都满足才触发
#第一个当前aof文件比上一次重写后aof文件增加的百分比,如果是0则aof不会自动重写,如果没有上一次
#重写则按redis服务启动时aof文件大小算
#第二个表示aof文件至少要达到这个大小才重写,主要为了防止aof文件很小的时候经常触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 在一些时候会发生aof文件最后面记录出问题,比如服务奔溃aof一行记录写到一半
#下面这个属性yes表示在恢复数据时碰到最后一条问题记录会记录下来但是不影响前面数据恢复,no则直接恢复失败
aof-load-truncated yes

优缺点

优点:

  redis更耐久,使用默认的每秒fsync策略,能保证最多丢失1秒的数据,而性能依旧很好

  有序的保存了对数据库的操作,易读。比如不小心执行flushall命令,找到aof文件,移除末尾的flushall命令,就能恢复数据

缺点

  相同数据集下,aof文件体积通常要大于RDB文件体积

  aof的数据恢复速度可能会低于RDB不过是可以接受的

分享到:
评论

相关推荐

    redis持久化方式

    ### Redis持久化方式详解 Redis 是一款高性能的键值存储系统,因其卓越的读写速度、丰富的数据结构以及灵活的应用场景而备受青睐。为了保证数据的安全性和持久性,Redis 提供了两种主要的持久化机制:RDB 快照...

    Redis持久化、主从与哨兵架构详解(1)

    Redis持久化、主从与哨兵架构详解 Redis持久化是指将Redis中的数据保存到磁盘中,以便在Redis服务器重启或崩溃后可以恢复数据。Redis提供了两种持久化方式:RDB快照和AOFAppend-Only File。 RDB快照 RDB快照是...

    06_redis 持久化.pdf

    Redis持久化是指利用永久性存储介质将Redis内存中的数据保存到磁盘上的过程,以防止数据的意外丢失,确保数据的安全性。其主要目的就是在Redis服务出现意外情况下,能够通过持久化存储的数据进行恢复,保证业务的...

    02-Redis持久化、主从与哨兵架构详解-ev.rar

    02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构...

    Redis的持久化方案

    Redis持久化的配置和管理涉及多个方面的知识,包括但不限于配置文件的设置、内存管理、文件系统的性能、以及操作系统的相关策略等。用户应充分了解这些知识点,以确保Redis能够稳定且高效地运行。

    Redis持久化、主从与哨兵架构详解.pdf

    Redis持久化机制包括RDB快照和AOF(Append Only File)两种方式,它们有不同的特点和使用场景,下面将详细分析这两种机制。 首先,RDB是通过创建数据集的快照来进行持久化的,在默认情况下,Redis会在内存中存储...

    02-Redis持久化、主从与哨兵架构详解.zip

    Redis是一款高性能的键值对内存数据库,常用于缓存、消息队列以及数据持久化等场景。本资料包主要探讨Redis的三个核心概念:持久化、主从复制和哨兵架构,这些都是确保Redis高可用性和数据安全的重要机制。 首先,...

    Redis 持久化之RDB和AOF.doc

    Redis 持久化是确保数据安全的重要机制,它提供了两种主要的方法:RDB(Redis Database)和 AOF(Append Only File)。RDB 是一种快照式的持久化方式,而 AOF 则记录每次写操作的日志。 RDB 持久化在特定条件下将...

    Redis windows 测试redis持久化功能1

    Redis 是一个高性能的键值数据库,广泛应用于缓存、数据持久化等场景。在 Windows 上测试 Redis 的持久化功能,主要是确保数据在系统重启或异常情况后能够被正确地保存和恢复。以下将详细介绍如何在 Windows 环境下...

    解密Redis持久化

    Redis 是一款高性能的键值存储系统,广泛应用于缓存和数据持久化。持久化是Redis的一个重要特性,确保即使在服务器崩溃或系统断电后,数据也能得以恢复。本文将深入解析Redis的持久化机制,主要包括RDB快照和AOF日志...

    Redis持久化以及集群部署

    ### Redis 持久化与集群部署探讨 #### 一、Redis 持久化机制 Redis 提供了两种持久化方式:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种机制各有特点,适用于不同的场景。 ##### 1. RDB...

    redis持久化

    redis,持久化,主要说明了redis中的两种持久化方式,是可以值得参考的

    从源码解读redis持久化

    【Redis持久化机制详解】 Redis作为一种高性能的内存数据库,其数据存储在内存中,因此面临一个问题:当系统崩溃或服务器意外关机时,内存中的数据可能会丢失。为了解决这个问题,Redis提供了两种主要的持久化机制...

    Redis持久化锦囊在手,再也不会担心数据丢失了(csdn)————程序.pdf

    Redis 持久化是 Redis 为了解决内存数据库在服务器宕机或重启时数据丢失问题而提供的功能。本文主要介绍了 Redis 的两种持久化机制:RDB(Redis Database Backup file)和 AOF(Append Only File),重点讲解了 RDB ...

    Redis windows 测试redis持久化功能.docx

    ### Redis Windows 测试Redis持久化功能 #### 一、Redis持久化概述 Redis 提供了两种持久化方式:RDB(Redis Database Backup)和AOF(Append Only File)。本篇文章将重点讨论 RDB 方式的持久化配置与测试方法。 ...

    Redis持久化 - RDB和AOF

    “Redis持久化 - RDB和AOF” Redis持久化是指将数据库中的数据保存到永久存储设备中,以避免数据丢失。Redis提供了两种持久化方式:RDB(快照方式)和AOF(写日志方式)。 RDB(Redis Database)是一种快照方式的...

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    Redis持久化、主从与哨兵架构详解开发文档

    Redis 持久化是确保数据在 Redis 服务器重启或发生故障时不会丢失的重要机制。主要包含两种方式:RDB(Redis Database Persistence)快照和 AOF(Append Only File)日志。 RDB 快照是 Redis 默认的持久化方式之一...

    Redis教程-Redis持久化.docx

    ### Redis 持久化详解 #### 一、引言 Redis 作为一款高性能的键值存储系统,广泛应用于各种场景中的数据缓存与管理。虽然 Redis 的主要特性在于其高速的内存操作能力,但为了确保数据的安全性及可靠性,Redis 提供...

Global site tag (gtag.js) - Google Analytics