04. Redis基础-持久化

简介

持久化

什么是持久化

将内存中的数据保存至永久性存储介质中,称为持久化。

为什么要持久化

防止数据的意外丢失,确保数据的安全性

持久化过程保存了什么

  • RDB

RDB是以快照形式保存,保存当前数据状态,存储数据结果,存储格式简单,关注点再数据

  • AOF

AOF是以日志形式保存,保存数据的操作过程,存储操作过程,存储格式复杂,关注点在数据的操作过程

RDB优缺点

优点

RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照。
非常适用于备份,全量复制等场景。
比如:每6小时执行bgsave备份,并把RDB文件拷贝到远程主机,用于容灾恢复。
Redis加载RDB恢复数据远远快于AOF的方式。

缺点

RDB方式数据没办法做到实时持久化、秒级持久化。
bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,执行频繁导致成本过高。
RDB文件使用特定二进制格式保存,存在老版本Redis不兼容新版本RDB格式问题。

AOF优缺点

优点

AOF可以更好的保护数据不丢失
AOF日志文件没有任何磁盘寻址开销,写入磁盘性能非常高,文件不容易损坏
AOF日志文件即使过大,出现后台重写操作后也不影响客户端的读写

缺点

AOF方式生成的日志文件太大,需要不断AOF重写进行瘦身
AOF存储的是文本文件,即使重写以后文件体积仍然较大
AOF恢复数据速度比RDB慢

Redis持久化-RDB实现

命令实现

  • 保存数据

在Redis控制台中可以使用bgsave来保存数据

192.168.108.130:6379[1]> bgsave
Background saving started
  • 查看数据
ll /usr/local/redis/data/
total 4
-rw-r--r-- 1 root root 120 Mar  6 15:18 dump.rdb

配置实现

  • Redis配置文件

配置文件路径:/usr/local/redis/conf/redis.conf

bind 0.0.0.0
port 6379
requirepass 1qaz!QAZ
protected-mode yes
timeout 0
databases 16
daemonize yes
pidfile /usr/local/redis/pid/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/logs/redis.log"

#数据保存路径
dir /usr/local/redis/data/

#备份策略
save 900 1
save 300 10
save 60 10000

#备份文件名称
dbfilename dump.rdb
  • 重启Redis
redis-server /usr/local/redis/conf/redis.conf

修复文件

如果遇到Redis异常死机后,可采用这种方式修复数据文件

redis-check-rdb /usr/local/redis/data/dump.rdb

Redis持久化-AOF实现

配置实现

  • Redis配置文件
bind 0.0.0.0
port 6379
requirepass 1qaz!QAZ
protected-mode yes
timeout 0
databases 16
daemonize yes
pidfile /usr/local/redis/pid/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/logs/redis.log"

#数据保存路径
dir /usr/local/redis/data/

#备份策略
##开启AOF备份模式
appendonly yes
##收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
#appendfsync always
##每秒写入磁盘一次,在性能和持久化方面做了很好的折中
appendfsync everysec
##完全依赖os,性能最好,持久化没保证
#appendfsync no

#备份文件名称
appendfilename "appendonly.aof"
  • 重启Redis
redis-server /usr/local/redis/conf/redis.conf

修复文件

如果遇到Redis异常死机后,可采用这种方式修复数据文件

redis-check-aof --fix /usr/local/redis/data/appendonly.aof

总结

  1. 如果Redis使用RDB和AOF两种保存方式,那么Redis只使用AOF的数据;

你可能感兴趣的:(Redis,redis)