Redis是一个常用的键值存储缓存系统,在高并发的场景中可以发挥巨大的作用。然而,因为Redis是内存数据库,所以一旦服务器断电或者重启,Redis中的所有数据都将被清空,这对于生产环境来说是不能够接受的。为了解决这个问题,Redis提供了持久化功能,可以将内存中的数据保存到磁盘中,以便在服务器重启后重新加载。Redis 的持久化有两种方式:RDB(Redis DataBase)和 AOF(Append Only File)。
2. RDB持久化配置
RDB 是 Redis 内置的一种数据持久化方式,它可以将 Redis 在内存中的数据以快照的方式定期写入磁盘。Redis 提供了两种触发 RDB 持久化的方式:自动触发和手动触发。
2.1 自动触发 RDB 持久化
Redis 可以通过配置文件 redis.conf 来自动触发 RDB 持久化。找到下面两行配置:
save 900 1save 300 10
Redis 会在满足以下条件之一时自动执行 RDB 持久化:
当前 Redis 数据库中有至少一个键被修改过(比如添加个键值对、删除一项键值对等)。
进程过期,触发信号处理程序(exec 循环中触发定时器或者通过其他方法),Redis 将会执行 BGSAVE 命令生成 RDB 文件并保存到磁盘。
其中每一行的配置都是保存时间和修改次数的两个参数。第一行的配置为“900 1”,表示如果在 900 秒内,有超过 1 个键被修改,那么 Redis 就会触发一次保存操作。第二行配置的含义是如果在 300 秒内,有超过 10 个键被修改,那么 Redis 就会触发一次保存操作。
2.2 手动触发 RDB 持久化
除了自动触发 RDB 持久化之外,Redis 还支持手动触发 RDB 持久化操作。可以通过命令 SAVE 或 BGSAVE 手动触发 RDB 持久化操作。其中 SAVE 命令会阻塞 Redis 的主线程运行,直到所有数据都写入到磁盘中之后,主线程才会暂停,直到保存工作完成为止。而 BGSAVE 命令则不会阻塞 Redis 主线程的正常运行,需要特别注意的是,BGSAVE 命令并不会阻塞主线程,主线程不会暂停。因此,需要使用 monitor 命令观察异步 RDB 文件生成进度。
3. AOF 持久化配置
AOF(Append Only File)是 Redis 提供的一种更为持久化的方式。在 AOF 持久化模式下,Redis 不再将所有修改操作保存到内存中,而是将所有写命令追加到一个日志文件中。这个日志文件保存在 Redis 的数据目录中,以 AOF 文件的形式存在。AOF 文件采用简单的文本格式,可以在需要的时候随时使用外部工具打开,复查操作。
Redis 提供了三种 AOF 持久化方式:always,everysec和no。其中 always 是完全持久化策略,每一个写入命令都会同步到磁盘上;everysec 策略则表示写入命令会每秒钟进行一次同步,而 no 模式则表示不采用 AOF 持久化。
为了开启 AOF 模式,首先需要修改 Redis 配置文件 redis.conf,找到以下两个参数:
appendonly noappendfilename "appendonly.aof"
开启 AOF 模式后,Redis 将会在重新启动之后自动重新载入 AOF 文件中保存的数据,并开始将写命令追加到 AOF 文件上。如果 AOF 文件太大,可以使用 BGREWRITEAOF 命令进行重写。
以上就是 Redis 持久化的配置方法,RDB 持久化可以通过自动触发或手动触发的方式,而 AOF 持久化则可以通过修改 Redis 配置文件实现。