redis(5)持久化

一、持久化

计算机的数据有两种状态:

1)持久数据:如内存当中的数据

2)瞬时数据:如硬盘上的数据

持久化就是将瞬时数据转换为持久数据的一个过程,但注意持久化并不意味的数据永远存在,针对不同的持久化,数据的生命周期也是不同的。比如,一次session会话中session容器中的的持久化,如果容器销毁该生命周期也就结束。

二、redis的持久化策略

redis是一个基于内存的数据库,但它也提供了持久化策略,分为两种:

1)RDB

2)AOF

redis默认采用rdb策略,你可以选择使用其中一种,也可以两种同时使用。如果两者同时使用的化,需要注意避免同时比较耗资源的I/O操作,不过一般上使用一种即可,或者使用默认策略。

RDB策略:

  简单来说,它就是采用定时生成快照的方式(rdb格式文件),比如:每小时保存一次,每天保存一次。这种策略非常方便地用来做数据备份。根据你的备份数据,你可以简单的把redis还原到任何你备份的版本。

AOF策略:

  AOF于RBD不同,它并不存储数据,而是将命令写入到日志当中,在系统重启的时候,通过重新执行日志中的命令构建数据。  

三、RDB/AOF优缺点

RDB优点:

  1)由于RDB将数据持久化,你可以在遇到问题时候轻松地恢复数据

  2)RDB的持久化是通过启动一个子线程来执行I/O的,不会阻塞当前线程。

  3)在redis重启的时候,如果数据较大,采用rdb方式比较快速。

RDB缺点:

  1)由于定时策略,那么如果redis遇到问题,很有可能丢失最新的数据。由于RDB数据都集中在一个文件,如果文件损坏,那么数据损失几乎是灾难性的。

  2)RDB会启动一个线程去持久化数据,但是如果数据量很大,那么可能会由于如超时,CPU性能不足等问题出现停止执行的情况。虽然这点上AOF也是启动一个线程去处理,但是你可以调整日志的写入频率来缓解这种问题。

AOF优点:

  1)AOF策略相对更加的耐用,你可以配置不同的持久化形式比如:每秒一次、每次key变化、或完全不持久化。其实即使每秒一次,它的性能也是很不错的,并且你最多只会丢失一秒钟的数据。

  2)AOF是采用附加到日志的方式,所以它不会出现如断电导致数据损坏的情况。即使在写入日志的过程中断电,也可以轻易地通过redis-check-aof工具来解决。

  3)如果日志文件越来越大,redis会自动生成新的文件,然后切换并写入到新的文件当中。

  4)日志文件的格式是非常简单易懂的,你甚至可以停止redis更改日志中的命令,然后再重新启动。

AOF的缺点:

  1)相同的数据集,AOF所占用的空间明显大于RDB文件。

  2)AOF写入频繁,I/O的频率对于RDB来说更高,性能上自然会略低。

  3)有一些特定的命令会导致AOF出现问题,当然redis不断的迭代会相应的解决一些问题。但RDB明显不会出现这些问题。

四、如何使用

1)快照

你可以在redis.conf配置快照的生成策略,如:

save 60 1000

60秒如果有1000个key发生变化。如果要关闭快照,可以注释掉该配置

RDB执行过程:启动一个子线程去生成RDB临时文件,这个临时文件生成完毕以后会替换旧的文件。

2)Append-only file

你只需要在redis.conf中将它开启即可(修改为yes)

appendonly yes

你也可以配置日志写入频率:

1)always 每当有变化

2) seconds 每秒钟

3) no 不写入

AOF执行过程:子线程去重写一个临时文件,当重写完毕,父线程会把缓冲区的新命令写入到临时文件的尾巴,然后替换旧的文件。(这里注意,在子线程重写的过程中,父线程会将新命令写入缓冲区、也会写入旧文件,这样即使子线程重写失败,旧文件依然完整)

五、备份恢复

无论采用RDB策略还是AOF策略,最终都会生成文件本地文件,而备份和恢复其实就是将完整的本地文件进行备份,通过加载备份文件来恢复数据。

原文地址:https://www.cnblogs.com/lay2017/p/9266102.html

时间: 2024-11-13 03:54:07

redis(5)持久化的相关文章

redis 数据持久化

转:redis 数据持久化 1.快照(snapshots) 缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb.你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘:或者你可以手工调用命令SAVE或BGSAVE. 数据保存的目录: 工作原理 Redis forks. 子进程开始将数据写到临时RDB文件中. 当子进程完成写RDB文件,用新文件替换老文件. 这种方式可以使Redis使用copy-on-write技术. 2.APP

Redis数据持久化机制AOF原理分析二

Redis数据持久化机制AOF原理分析二 分类: Redis 2014-01-12 15:36  737人阅读  评论(0)  收藏  举报 redis AOF rewrite 目录(?)[+] 本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅读本文之前请先阅读Redis数据持久化机制AOF原理分析之配置详解文章,了解AOF相关参数的解析,文章链

Redis源码剖析和注释(十八)--- Redis AOF持久化机制

Redis AOF持久化机制 1. AOF持久化介绍 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题. RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失. AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的. Redis RDB持久化机制源码剖析和注释 AOF的使用:在redis.conf配置文件中,将appendonly设置为y

Redis的持久化

Redis的持久化有两种方法 一,RDB:是redis的默认方法,RDB相当于照快照,保存的是一种状态(保存的文件后缀是 rdb) 优点:1.快照保存数据速度极快,还原数据速度极快 2.适用于灾难备份 缺点:1.小内存机器不适合使用. RDB机制符合要求就会照快照.(随时随地的启动),会占用一部分系统资源(突然地), 很可能内存不足直接宕机.(宕机后,服务器会关闭,非正常关闭) 适用于内存比较充裕的计算机. RDB照快照的条件: 1.服务器正常关闭时候,照快照.  ./bin/redis-cli

redis开启持久化

redis的持久化有rdb和aof两种. rdb是记录一段时间内的操作,一盘的配置是一段时间内操作超过多少次就持久化. aof可以实现每次操作都持久化. 这里我们使用aof. 配置方式,打开redis的配置文件.找到appendonly.默认是appendonly no.改成appendonly yes. 再找到appendfsync 默认是: # appendfsync always #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 appendfsync ever

Redis实战(八)Redis的持久化

Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效. Redis的持久化主要有快照Snapshotting和AOF日志文件两种方式. 前者会根据配置的规则定时将内存中的数据持久化到硬盘上, 后者则是在每次执行写命令之后将命令记录下来. >>RDB方式 Redis是会以快照的形式将数据持久化到磁盘上. 默认会将快照文件存储在Redis当前进程的工作目录的dump.rdb文件中, 可以通过配置文件

Redis的持久化RDB

dbfilename redis.db  //持久化的文件dir /home/redis/6379    //文件所在目录save 900 1    // 900秒 修改一个key就保存一次save 300 10    // 300秒 修改10个key就保存一次save 60 10000    // 60秒 修改10000 个key就保存一次//上述3个save条件应该从下往上看,每个条件都是或的关系rdbcompression yes        //启用压缩rdbchecksum yes 

Redis总结(四)Redis 的持久化

前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来持久化,以确保redis 的数据安全.    redis持久化的两种方式 redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File). RDB,简而言之,就是将存储的数据快照的方式存储到磁盘上, AOF,则是将redis执行过的所有写指

Redis的持久化-AOF

Redis的持久化AOF模式,以日志的形式记录服务器所处理的每一个写操作,在Redis服务启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的. AOF的优点: 1.可以带来更高的数据安全性. 2.由于对日志文件的写入操作采用的是append模式,因此在写入过程汇总即使出现宕机,也不会破坏日志文件中已经存在的内容,然而如果我们本次操作写入一半数据就出现系统崩溃,可以在Redis下一次启动之前,通过redis-check-aof工具帮助解决数据一致性的问题. 3.如果日志过大,

redis修改持久化路径、日志路径、清缓存

redis修改持久化路径和日志路径 vim  redis.conf logfile /data/redis_cache/logs/redis.log    #日志路径 dir /data/redis_cache      #持久化路径,修改后 记得要把dump.rdb持久化文件拷贝到/data/redis_cache下 先杀掉redis,拷贝dump.rdb,启动 清缓存 cd  /data/server/redis-2.6.16/src ./redis-cli    #进入 dbsize fl