Redis 如何做持久化?

2023-12-10  本文已影响0人  左诗右码

Redis 的持久化

两种持久化方式

RDB 模式

  1. 适合用于进行备份
  2. fork 出子进程进行备份,主进程没有任何 IO 操作
  3. 恢复大数据集时的速度快
  1. 特定条件下进行一次持久化,易丢失数据
  2. 庞大数据时,保存时会出现性能问题

设置方式:

  1. 通过配置文件的方式,自动开启 RDB 持久化

配置文件路径: sudo vim /etc/redis/redis.conf

# 备份的频次
save 900 1    # 900 秒内,有 1 次更新操作,就将数据同步到数据文件
save 300 10
save 60 10000

# 备份的文件名
 253 dbfilename dump.rdb

# 备份的目录路径
 263 dir /var/lib/redis

  1. 直接通过 redis-cli 通过指令,手动开启 RDB 持久化
127.0.0.1:6379> save
OK

127.0.0.1:6379> bgsave
Background saving started

savebgsave 命令都是用于将当前数据库备份,但是 save 命令会阻塞主进程,save 操作完成之后,主进程才开始工作,客户端可以连接;bgsave 命令是 fork 一个专门 save 的子进程,不会影响主进程。

默认的备份文件为: vim /var/lib/redis/dump.rdb

AOF 模式

  1. 数据非常完整,故障恢复丢失数据少
  2. 可对历史操作进行处理
  1. 文件的体积大
  2. 速度低于 RDB 且故障恢复速度慢

设置方式:

  1. 通过配置文件的方式,自动开启 AOF 持久化

配置文件路径: sudo vim /etc/redis/redis.conf

# 当 appendonly 参数为 yes 时,则开启 AOF 模式
 672 appendonly yes

# 备份的文件名
 676 appendfilename "appendonly.aof"

# 同步的方式
 701 # appendfsync always  // 同步持久化,每次数据变更都会立刻保存到磁盘上,需要实时记录,因此效率不高,但是数据十分完整
 702 appendfsync everysec  // 异步持久化,每隔 1s 记录一次
 703 # appendfsync no  // 不同步,但是只有在 redis 被关闭、aof 功能被关闭、系统的写缓存被刷新(比如缓存已经被写满的情况)这 3 种情况时,才会触发 save 操作

  1. 直接通过 redis-cli 通过指令,手动开启 AOF 持久化
# 先连接 redis-cli 然后执行 `config set appendonly yes` 命令以生成 aof 数据文件
127.0.0.1:6379> config set appendonly yes

# 或者直接
# 先清空目标 redis 中全部数据
redis-cli -h {target-host} -a {target-password} flushall
# 然后在源 redis 中生成 aof 备份文件
redis-cli -h {source-host} -a {source-password} config set appendonly yes

默认的备份文件为: vim /var/lib/redis/appendonly.aof

两种模式可以同时开启,同时开启的时候会优先执行 AOF 模式的备份文件,进行 AOF 模式恢复,同时开启的时候,需要注意在 redis 使用之初就要先开启 AOF 模式,以免 AOF 模式,只会记录部分命令,导致恢复数据不完整。

合理地使用 Redis

  1. 设置超时时间
  2. 不存放过大文件(最好不要超过 500 字节)
  3. 不存放不常用数据
  1. 合理使用不同的数据结构类型
  2. 慎用正则处理或者批量操作 Hash、Set 等。(因为 redis 是单线程,如果正则匹配 key 的话,可能会影响其他命令的使用)
上一篇下一篇

猜你喜欢

热点阅读