redis 在什么情况下会存到文件中

fiy 其他 5

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Redis在以下几种情况下会将数据存储到文件中:

    1. 持久化策略:

      • RDB持久化:Redis可以通过将内存中的数据快照保存到磁盘文件(RDB文件)中,以便在服务重启后恢复数据。可以通过配置文件中的save指令来设置触发RDB持久化的条件,如某个时间内有多少次写操作或者某个时间内有多少次写操作且距离上一次持久化已经过去了多长时间等。
      • AOF持久化:Redis可以将每个写操作追加到文件(AOF文件)中,以便在服务重启后重新执行这些写操作以还原数据。可以通过配置文件中的appendonly指令来开启AOF持久化功能。
    2. 执行BGSAVE命令:

      • BGSAVE命令:Redis提供了BGSAVE命令,可以在后台异步进行RDB持久化操作。该命令会fork出一个子进程,将内存中的数据保存到磁盘文件中,而父进程仍然可以继续处理客户端请求。
    3. 执行SHUTDOWN命令:

      • SHUTDOWN命令:当执行SHUTDOWN命令时,Redis会将数据保存到磁盘文件中,并关闭服务。
    4. 超过内存限制:

      • 当Redis的内存使用量超过了配置文件中maxmemory指令设置的限制时,Redis会使用一种称为"写入策略"的机制来处理数据。其中的一种策略是将数据存储到文件中,以便释放内存空间。

    总的来说,Redis会将数据存储到文件中主要是为了实现数据的持久化,以保证数据在服务重启后能够被恢复。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Redis 在以下情况下会将数据存储到文件中:

    1. 快照持久化:Redis 提供了快照持久化的功能,可以将内存中的数据以快照的形式保存到磁盘上的一个二进制文件(RDB 文件)。这种持久化方式可以通过配置文件中的 save 配置项来控制,例如设置 save 900 1 表示如果在 900 秒(15 分钟)内有至少一个键发生变化,则进行快照持久化。快照持久化将当前数据的状态完全保存下来,可以在 Redis 重启后快速恢复数据。

    2. AOF 日志持久化:除了快照持久化外,Redis 还提供了另一种持久化方式,即 AOF(Append Only File)日志持久化。该方式会将每个写操作以日志的形式追加到一个文件末尾(AOF 文件),当 Redis 重启时,可以通过重新执行 AOF 文件中的命令来重建数据集。与快照持久化相比,AOF 日志持久化的粒度更细,可以更好地避免数据丢失。

    3. 手动执行持久化命令:除了自动持久化方式,Redis 还支持手动执行持久化命令。通过执行 BGSAVE 命令可以在后台异步保存数据到磁盘,在此期间 Redis 仍然可以继续处理命令请求。执行 SAVE 命令可以在保存完成之前阻塞所有命令请求,直到保存完成。这两种命令都可以将 Redis 的数据存储到文件中。

    4. 缓存淘汰策略导致的数据写回:当 Redis 的内存空间不足时,为了释放内存,就会根据设定的缓存淘汰策略将一些数据从内存中删除。如果被淘汰的数据被修改过,则会将这些数据写回到磁盘中的 RDB 文件中。这种情况下的写回是自动进行的,不需要手动触发。

    5. 客户端关闭连接时的数据写回:当客户端与 Redis 的连接断开时,如果客户端在请求中对数据做了修改,那么 Redis 会将这些修改写回到磁盘中的 AOF 文件中。这是为了防止因为客户端断开连接导致的数据丢失。这种写回并不是实时进行的,而是在后台异步执行的。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在以下情况下,Redis 会将数据存储到文件中:

    1. 快照持久化:Redis 支持快照持久化机制,将内存中的数据定期或手动地保存到磁盘上的一个快照文件中。当 Redis 需要重启时,可以通过加载快照文件将数据恢复到内存中。

    2. AOF(Append Only File)持久化:Redis 还支持 AOF 持久化机制,将写操作以追加的方式写入到一个日志文件中。当 Redis 需要重启时,可以通过重新执行 AOF 文件中的命令将数据恢复到内存中。

    下面分别对快照持久化和 AOF 持久化进行具体介绍。

    1. 快照持久化

    1.1 快照概述

    快照持久化是通过创建 Redis 数据的二进制快照来实现的。Redis 将数据写入到一个临时文件中,然后将该临时文件重命名为特定格式的文件(如 dump.rdb)。Redis 在启动时会检查是否存在快照文件,如果存在则加载快照文件将数据恢复到内存中。

    1.2 快照过程

    快照持久化的过程可以分为以下几个步骤:

    1.2.1 创建子进程

    Redis 在进行快照持久化时会创建一个子进程,由子进程负责在后台进行数据保存的工作。

    1.2.2 子进程执行快照

    子进程会将当前的数据集保存到一个临时文件中,该临时文件是一个 Redis 数据的二进制序列化文件。

    1.2.3 替换快照文件

    当子进程完成数据保存后,Redis 会用临时文件替换原先的快照文件,保证了原子性操作。

    1.3 快照配置

    可以通过修改 Redis 配置文件 redis.conf 中的相关配置项来调整快照持久化的配置,如:

    # 文件名
    dbfilename dump.rdb
    # 快照保存路径
    dir /var/lib/redis
    # 快照触发条件
    save 900 1
    save 300 10
    save 60 10000
    

    以上配置表示快照文件名为 dump.rdb,保存路径为 /var/lib/redis。快照触发条件表示当 900 秒内至少发生 1 个修改、300 秒内至少发生 10 个修改、60 秒内至少发生 10000 个修改时,Redis 将执行一次快照持久化操作。

    2. AOF 持久化

    2.1 AOF 概述

    AOF(Append Only File)持久化是通过将写操作以追加的方式写入到一个日志文件中实现的。当 Redis 需要重启时,会重新执行 AOF 文件中的命令来恢复数据到内存中。AOF 持久化可以保证更高的数据安全性,但同时也带来了更高的磁盘占用和写操作的延迟。

    2.2 AOF 追加阻塞

    AOF 持久化会将写操作追加到 AOF 文件的末尾,同时会存在一个 AOF 缓冲区,用来暂时存储写操作。当 AOF 缓冲区的内容超过一定大小或一定时间后,Redis 会将缓冲区的内容追加到 AOF 文件中,这就是 AOF 追加。

    在将缓冲区的内容追加到 AOF 文件时,Redis 会阻塞所有写入操作,直到追加完成。这样可以保证数据的一致性,但也会导致某些写入操作的延迟。

    2.3 AOF 重写

    AOF 文件会随着时间的推移不断增大,为了控制 AOF 文件的大小,Redis 提供了 AOF 重写功能。AOF 重写会创建一个新的 AOF 文件来替换现有的 AOF 文件,并且只保留可以恢复数据的最小命令集。

    AOF 重写的过程是通过遍历现有的内存数据来重写新的 AOF 文件。Redis 在后台使用子进程来执行 AOF 重写操作,不会阻塞服务器的正常运行。

    2.4 AOF 配置

    可以通过修改 Redis 配置文件 redis.conf 中的相关配置项来调整 AOF 持久化的配置,如:

    # 启用 AOF 持久化
    appendonly yes
    # AOF 文件名
    appendfilename "appendonly.aof"
    # AOF 触发条件
    appendfsync always
    

    以上配置表示启用 AOF 持久化,并将 AOF 文件名设置为 appendonly.aof。appendfsync 项配置了 AOF 的触发条件,always 表示每次写入操作都会将数据同步到 AOF 文件中,确保数据的安全性,但也会带来更高的写入延迟。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部