数据持久化

RedisDataBase(RDB)

  • 数据持久化方式之一

  • 数据持久化默认方式

  • 按照指定时间间隔,将内存中的数据集快照写入硬盘

  • 通过RDB进行备份还原,只要拷贝RBD文件即可

  • 数据从内存保存到磁盘的频率设置

save 900 1                  //15分钟内有1个key改变即存盘  
save 300 10                   //5分钟内有10个key改变即存盘
save 60 10000               //1分钟内有10000个key改变即存盘
  • 也可以进行手动存盘
save           //阻塞写存盘
bgsave              //不阻塞写存盘
RDB的优缺点
  • 优点:

    • 高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件
    • 过程中主进程不做任何IO操作
    • 比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
  • 缺点:

    • 意外宕机时,丢失最后一次持久化的所有数据
配置RDB
  • 配置RDB参数
# [root@redis7 ~]# vim /etc/redis/6379.conf
dbfilename dump.rdb
save 900 1
save 120 10
save 60 10000
  • 清空rbd数据
# 停止redis服务
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped

# 删除数据
[root@redis7 ~]# rm -rf /var/lib/redis/6379/*

# 启动服务
[root@redis7 ~]# service redis_6379 start
Starting Redis server...

# 查看数据文件,因为没有存储过任何数据,所以不存在RBD文件
[root@redis7 ~]# ls /var/lib/redis/6379/
  • 存储数据
# 120秒内添加10个数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
OK
127.0.0.1:6379> MSET k6 v6 k7 v7 k8 v8 k9 v9 k10 v10
OK

127.0.0.1:6379> KEYS *
 1) "k10"
 2) "k2"
 3) "k3"
 4) "k9"
 5) "k8"
 6) "k4"
 7) "k5"
 8) "k7"
 9) "k6"
10) "k1"
127.0.0.1:6379> exit

[root@redis7 ~]# ls /var/lib/redis/6379/
dump.rdb
  • 验证备份还原
# 备份数据文件
[root@redis7 ~]# cp /var/lib/redis/6379/dump.rdb ~/

# 模拟误删除数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> exit

# 恢复数据
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped

[root@redis7 ~]# cp dump.rdb /var/lib/redis/6379/   # 用备份文件覆盖目标文件
cp: overwrite ‘/var/lib/redis/6379/dump.rdb’? y

# 启动服务并验证
[root@redis7 ~]# service redis_6379 start
Starting Redis server...
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
 1) "k6"
 2) "k3"
 3) "k4"
 4) "k1"
 5) "k8"
 6) "k7"
 7) "k9"
 8) "k5"
 9) "k10"
10) "k2"

Append Only File(AOF)

  • 追加方式记录写操作的文件
  • 记录redis服务所有写操作
  • 不断的将新的写操作,追加到文件的末尾
  • 默认没有启用
  • 使用cat命令可以查看文件内容
AOF文件记录写操作的方式
  • appendfsync always:时时记录,并完成磁盘同步
  • appendfsync everysec :每秒记录一次,并完成磁盘同步
  • appendfsync no:写入aof ,不执行磁盘同步
AOF优点与缺点
  • 优点:

    • 可以灵活设置持久化方式
    • 出现意外宕机时,仅可能丢失1秒的数据
  • 缺点:

    • 持久化文件的体积通常会大于RDB方式
    • 执行fsync策略时的速度可能会比RDB方式慢
配置AOF
  • 修改配置文件
[root@redis7 ~]# redis-cli
127.0.0.1:6379> CONFIG SET appendonly yes
OK
127.0.0.1:6379> CONFIG REWRITE
OK
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> exit

# 查看AOF文件
[root@redis7 ~]# ls /var/lib/redis/6379/
appendonly.aof  dump.rdb
  • 验证备份还原
# 备份AOF文件
[root@redis7 ~]# cp /var/lib/redis/6379/appendonly.aof ~/

# 删除数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
 1) "k6"
 2) "k3"
 3) "k4"
 4) "k1"
 5) "k8"
 6) "k7"
 7) "k9"
 8) "k5"
 9) "k10"
10) "k2"
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> exit

# 恢复数据
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped
[root@redis7 ~]# rm -rf /var/lib/redis/6379/*
[root@redis7 ~]# cp appendonly.aof /var/lib/redis/6379/

# 启动服务并验证
[root@redis7 ~]# service redis_6379 start
Starting Redis server...
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
 1) "k10"
 2) "k3"
 3) "k2"
 4) "k9"
 5) "k1"
 6) "k6"
 7) "k5"
 8) "k8"
 9) "k7"
10) "k4"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容