`

Redis 序列之二——Redis的持久化

 
阅读更多

              Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持两种持久化方式,一种是 Snapshotting(快照,默认方式),另一种是Append-only file(aof,文件追加)的方式。

              (一)Snapshotting(快照)

              这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置:

             save 900 1   #900秒内如果超过1个key被修改,则发起快照保存 ;

             save 300 10  #300秒内容如超过10个key被修改,则发起快照保存 ;

             save 60 10000  #60秒内如果发生超过10000个key被修改,则发起快照保存。

           下面介绍详细的快照保存过程:

           1. redis调用fork命令,生成一个子进程。 

           2.父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write),父子进程会共享相同的物理页面,当父进程处理写请求时,os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照。 

          3.当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。

          client也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有 client的请求,这种方式会阻塞所有client请求。所以不推荐使用。另一点需要注意的是,每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步脏数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。另外由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用aof持久化方式。

 

            (二) Append-only file(aof,日志追加)

          aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改,不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次):

appendonly  yes  //启用aof持久化方式  

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

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

appendfsync no   //完全依赖os,性能最好,但持久化没保证

 

分享到:
评论

相关推荐

    redis可视化工具

    3. **持久化**:提供RDB和AOF两种持久化方式,确保数据安全。 4. **事务支持**:可以原子地执行多个操作。 5. **网络通信协议兼容**:使用简单明了的RESP(Redis序列化协议)与客户端交互。 **redis-desktop-...

    RedisStudio--redis界面查看工具

    7. **持久化与复制**:协助用户理解和配置Redis的持久化策略(如RDB和AOF)以及主从复制设置。 8. **性能监控**:提供基本的性能指标,如命令执行速率、内存使用情况等。 **安装与使用** 在提供的文件列表中,`...

    redis-server:5.0.14.1 windows版本

    4. **持久化**: Redis通过两种方式实现数据持久化:RDB(快照)和AOF(Append Only File)。RDB会在指定时间间隔创建数据库的快照,而AOF则记录所有写操作日志,以在重启后重播这些操作恢复数据。 5. **主从复制**:...

    Redis-5.0.14.1+Another-Redis-Desktop-Manager.1.5.8 windows版

    3. **流(Streams)**:在5.0版本中,Redis引入了新的数据结构——Stream,它是一种日志数据结构,允许存储有序的时间序列数据,适用于实时分析和消息传递。 4. **Lua脚本增强**:Redis支持在服务器端执行Lua脚本,...

    python redis存入字典序列化存储教程

    在Python中,Redis被广泛用作数据缓存和持久化存储。然而,由于Redis默认处理的是字符串,当我们要存储复杂的数据结构,如字典时,就需要进行序列化和反序列化操作。本教程将深入讲解如何使用Python的Redis库来存储...

    第7单元 Redis事务与持久化1

    【Redis持久化】 Redis的持久化主要有两种方式:RDB(Redis Database Binary)和AOF(Append Only File)。持久化是防止数据丢失的重要手段,因为Redis是内存数据库,一旦服务崩溃或异常关闭,内存中的数据可能会...

    Redis入门第二版

    Redis提供两种持久化方式:RDB(快照)和AOF(Append Only File)。RDB定期保存整个数据库状态,AOF记录所有写操作日志。可以根据应用场景选择合适的持久化策略。 ### 8. 缓存策略 Redis常作为缓存系统使用,理解...

    redis-7.2.3.zip

    Redis是一款高性能的键值对数据库,它以C语言编写,被广泛应用于缓存、消息队列、数据持久化等多个场景。本次我们关注的是其Linux版本的最新发行版——redis-7.2.3.zip。这个压缩包包含了在Linux环境下运行Redis ...

    Windows版 Redis 5.0.14

    - `redis-check-rdb.exe`用于检查RDB持久化文件的完整性,确保数据的正确存储。 - `redis-check-aof.exe`是AOF(Append Only File)日志文件的检查工具,用于验证AOF持久化数据的正确性。 6. **Windows环境下的...

    redis3.2 redis3.2 redis3.2

    在这个版本中,Redis 增强了对数据持久化的支持,同时优化了客户端连接管理,以及提供了更丰富的数据结构。 1. **新特性与改进** - **LUA脚本的原子性增强**:在Redis 3.2中,LUA脚本的执行保证了原子性,这使得...

    redis相关安装包.zip

    Redis是一款高性能的键值对数据库,常用于数据缓存、消息队列以及数据持久化等场景。在本文中,我们将详细探讨Redis 5.0版本的相关知识点,包括其新特性、安装过程、配置优化以及常见操作。 首先,Redis 5.0引入了...

    ServiceStack.Redis-5.8无限制.zip

    Redis是一款开源、高性能、内存中的键值数据库,广泛应用于缓存、消息队列和数据持久化等场景。版本5.8提供了对Redis最新特性和优化的支持。 在ServiceStack.Redis中,主要包含以下关键知识点: 1. **API设计**:...

    redis笔计(第二版)

    本笔记涵盖了从基础到高级的Redis知识,包括其安装、数据类型、持久化机制、主从复制、集群配置、哨兵模式,以及如何与Spring和SpringBoot框架集成。 1. Redis 简介 Redis 是“Remote Dictionary Server”的缩写,...

    Windows 下redis的的扩展

    现在,你可以在PHP脚本中使用Redis进行数据存储和检索,享受Redis带来的高性能缓存和数据持久化功能。 例如,你可以用以下代码在PHP中连接Redis: ```php $redis = new Redis(); $redis->connect('127.0.0.1', 6379...

    Redis5.0 Windows64

    - 数据持久化改进:RDB(Redis Database Backup)快照的性能得到优化,同时AOF(Append Only File)重写策略也更加智能,减少了磁盘占用。 - 模块系统:允许开发人员扩展Redis的功能,创建自定义数据类型或命令。 ...

    redis配置文件详解

    - **用途**: 规定在特定时间内达到一定变更次数时触发数据持久化操作。 - 如果在60秒内至少有10000个键被修改,则进行一次快照保存; - 如果在300秒内至少有10个键被修改,则进行一次快照保存; - 如果在900秒内...

    labview redis通讯源码及实例

    而Redis则是一款开源的、高性能的键值存储数据库,常用于缓存、消息队列以及数据持久化等场景。将LabVIEW与Redis结合,可以实现高效的数据交互,提升系统的实时性和可靠性。 在这个"labview redis通讯源码及实例"中...

    redis 入门简单demo

    虽然Redis默认在内存中存储数据,但为防止数据丢失,提供了两种持久化方式:RDB(定期保存数据库快照)和AOF(记录每次写操作)。在Demo中,可能会展示如何配置和使用这两种持久化方法。 6. **事务**: Redis支持...

    redis-5.0.5.zip windows版本

    - 配置文件默认为`redis.windows.conf`,可按需修改端口、数据持久化、日志等设置。 2. **主要特性** - **数据类型**:Redis支持字符串、哈希、列表、集合和有序集合等多种数据结构,满足不同场景需求。 - **...

    redis 3.0 win7 32位x86

    Redis提供了多种持久化策略,如RDB(快照)和AOF(Append Only File)。RDB会在指定时间间隔生成数据库的快照,而AOF则记录所有的写操作命令。在Windows环境下,配置持久化同样需要修改`redis.conf`文件。 **6. ...

Global site tag (gtag.js) - Google Analytics