Redis 提供了两种主要的持久化机制:RDB(Redis Database)快照和 AOF(Append-Only File)日志。每种机制都有其优缺点,可以根据具体需求选择适合的持久化策略。
一、RDB 持久化
RDB 持久化将 Redis 数据库中的数据在某个时间点生成一个快照,并将其保存到磁盘。RDB 文件是紧凑的二进制文件,适合用于备份和恢复。
1.1 RDB 配置
在 redis.conf
配置文件中,可以配置 RDB 快照的行为:
plaintext
save 900 1 # 900秒内如果有1个key变化, 则进行快照
save 300 10 # 300秒内如果有10个key变化, 则进行快照
save 60 10000 # 60秒内如果有10000个key变化, 则进行快照
1.2 手动触发 RDB
可以通过以下命令手动触发 RDB 快照:
SAVE
:同步保存 RDB 快照,阻塞 Redis 服务。BGSAVE
:在后台异步保存 RDB 快照,不阻塞 Redis 服务。
1.3 使用 RDB 快照
以下是一个使用 Jedis 手动触发 RDB 快照的示例:
java
import redis.clients.jedis.Jedis;
public class RedisRDBExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost", 6379)) {
// 手动触发 RDB 快照
String response = jedis.bgsave();
System.out.println("RDB Snapshot response: " + response);
}
}
}
二、AOF 持久化
AOF 持久化将每个写命令追加到一个日志文件中,重启 Redis 服务时通过重放这些命令来恢复数据。AOF 的优点是可以提供更高的持久化保障,但文件会比 RDB 大,恢复速度也较慢。
2.1 AOF 配置
在 redis.conf
配置文件中,可以配置 AOF 的行为:
plaintext
appendonly yes # 启用AOF持久化
appendfilename "appendonly.aof" # AOF文件名
AOF 文件的写入策略有三种,可以通过 appendfsync
配置:
appendfsync always
:每个命令都同步写入磁盘,性能最差但数据最安全。appendfsync everysec
:每秒同步写入磁盘,性能和数据安全性之间的折中。appendfsync no
:完全由操作系统决定何时同步写入磁盘,性能最好但数据安全性最低。
2.2 AOF 重写
AOF 文件会随着时间增大,Redis 提供了 AOF 重写机制,通过重写 AOF 文件来压缩文件大小。可以通过以下命令手动触发 AOF 重写:
BGREWRITEAOF
:在后台异步重写 AOF 文件。
2.3 使用 AOF
以下是一个使用 Jedis 手动触发 AOF 重写的示例:
java
import redis.clients.jedis.Jedis;
public class RedisAOFExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost", 6379)) {
// 手动触发 AOF 重写
String response = jedis.bgrewriteaof();
System.out.println("AOF Rewrite response: " + response);
}
}
}
三、混合持久化
Redis 4.0 引入了混合持久化机制,将 RDB 快照和 AOF 日志结合起来。在 Redis 4.0 及以上版本中,可以启用混合持久化:
plaintext
aof-use-rdb-preamble yes # 启用混合持久化
混合持久化会将最近的 RDB 快照和之后的 AOF 日志结合起来,这样可以在兼顾恢复速度和持久化保障的情况下,提供更好的性能。
四、持久化配置示例
以下是一个完整的 redis.conf
配置示例,展示了如何配置 RDB、AOF 和混合持久化:
plaintext
# RDB 配置
save 900 1
save 300 10
save 60 10000
# AOF 配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
# 混合持久化
aof-use-rdb-preamble yes
五、恢复数据示例
无论是使用 RDB 还是 AOF,恢复数据的过程都是自动的。只需确保 dump.rdb
文件或 appendonly.aof
文件存在于 Redis 的数据目录中,然后启动 Redis 服务即可自动恢复数据。
总结
Redis 提供了两种主要的持久化机制:RDB 快照和 AOF 日志。RDB 适用于定期备份和快速恢复,而 AOF 提供了更高的数据持久化保障。通过合理配置,可以根据具体需求选择适合的持久化策略。此外,Redis 4.0 引入的混合持久化机制结合了 RDB 和 AOF 的优点,提供了更好的性能和数据安全性保障。通过上述代码示例,可以轻松地在 Java 应用中使用 Jedis 客户端操作 Redis 的持久化机制。