Redis第三讲

一、Redis存储五种类型的常用命令(暂略)

二、持久化( 了解)

Redis 的高性能是由于其将所有数据都存储在了内存中,为了使 Redis 在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

Redis 支持两种方式的持久化,一种是 RDB 方式,一种是 AOF 方式。可以单独使用其中一种或将二者结合使用。

RDB  持久化

RDB 方式的持久化是通过快照snapshotting)完成的,当符合一定条件时 Redis 会自动将内存中的数据进行快照并持久化到硬盘。

RDB Redis 默认采用的持久化方式,在 redis.conf(Windows 下是 redis.windows.conf)配置文件中默认有此下配置:

 Redis持久化(第三讲)

save 开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系,“save 900 1”表示 15 分钟(900 秒钟)内至少 1 个键被更改则进行快照,“save 300 10”表示 5 分钟(300 秒)内至少 10 个键被更改则进行快照。

redis.conf 中:

    配置 dir 指定 rdb 快照文件的位置

             Redis持久化(第三讲)

    配置 dbfilenam 指定 rdb 快照文件的名称

             Redis持久化(第三讲)

Redis 启动后会读取 RDB 快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为 1GB 的快照文件载入到内存中需要花费 2030 秒钟。

使用建议:

通过 RDB 方式实现持久化,一旦 Redis 异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。如果数据很重要以至于无法承受任何损失,则可以考虑使用 AOF 方式进行持久化。

AOF  持久化

默认情况下 Redis 没有开启 AOFappend only file)方式的持久化,可以通过 appendonly参数并指定为 yes 开启:

 Redis持久化(第三讲)

开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入硬盘中的 AOF 文件。AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof,可以通过 appendfilename 参数修改:appendfilename appendonly.aof

 Redis持久化(第三讲)

 

同步策略

 Redis持久化(第三讲)

appendfsync no

当设置 appendfsync no 的时候,Redis 不会主动调用 fsync 去将 AOF 日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数 Linux 操作系统,是每 30 秒进行一次 fsync,将缓冲区中的数据写到磁盘上。

appendfsync everysec

当设置 appendfsync everysec 的时候,Redis 会默认每隔一秒进行一次 fsync 调用,将缓冲区中的数据写到磁盘。但是当这一次的 fsync 调用时长超过 1 秒时。Redis 会采取延迟fsync 的策略,再等一秒钟。也就是在两秒后再进行 fsync,这一次的 fsync 就不管会执行多长时间都会进行。这时候由于在 fsync 时文件描述符会被阻塞,所以当前的写操作就会阻塞。

appendfsync always

当设置 appendfsync always 时,每一次写操作都会调用一次 fsync,这是数据是最安全的,当然,由于每次都会执行 fsync,所以其性能也会受到影响。

二者比较

Redis持久化(第三讲)

Redis持久化(第三讲)

Redis持久化(第三讲)

 

 

 

相关文章: