0
点赞
收藏
分享

微信扫一扫

Redis学习11:持久化RDB/AOF


持久化简介

Redis学习11:持久化RDB/AOF_数据

  • 什么是持久化?
  • 利用永久性的存储介质进行保存,特定的时间将保存的数据进行恢复。
  • 持久化方式:保存分为快照和日志。注意日志保存的是整个操作的过程。
  • 在Redis中两种都有,左边叫做RDB,右边叫做AOF。

RDB 快照

  • RDB启动方式
  • 一定要有三个因素:任务时间地点
  • 对应命令:sava
  • 每执行一次就可以手动保存一次数据
  • 先通过 key * 查看有没有数据
  • 有没有数据 没有就添加
  • 然后save命令
  • 然后进入到data目录下会发现 dump.rdb 一个文件
  • 打开rdb文件发现乱码,是因为rdb是二进制文件所以查看不出来
  • 把rdb删掉,然后再执行一次save,然后查看会发现又有了rdb文件。
  • 每保存一次,会 生成一个rdb文件生成当前的快照信息。

RDBsava指令的相关配置

Redis学习11:持久化RDB/AOF_redis_02

  • 进入data目录中,查看dump.rdb文件。
  • 然后可以通过更改配置文件来修改save的相关命令
  • 进入到目录中,cat conf文件,进行更改配置
  • 然后重新开启一下这个进程,先kill -s 这个进程
  • 然后redis-server conf/redis-6379.conf 启动redis就可以生效了
  • 然后就可以通过save命令后直接去data目录下查看有没有这个文件

Redis学习11:持久化RDB/AOF_数据库_03

  • 先杀掉这个进程,然后再次启动这个服务,看是否恢复了数据 。

Redis学习11:持久化RDB/AOF_redis_04

  • 通过命令:redis-server conf/redis-6379.conf 启动
  • 可以通过:ps -ef | grep redis- 来查看有哪些进程
  • 通过客户端连接 然后keys * 查看到原来的数据恢复了
  • 原理是在启动的时候把数据加载了进行恢复

save的工作原理

Redis学习11:持久化RDB/AOF_redis_05

  • 要注意redis是单线程执行。
  • 注意save的指令可能会阻塞redis服务器,线上环境不建议使用,因为会把性能损耗很多。
  • 所以需要慎重需要使用RDB线上的使用。
  • 总结:当数据量过大,rdb单线程执行方式造成的效率过低,性能过低。
  • 解决方案:rdb后台执行。
  • bgsave 就是命令了。
  • 手动启动后,后台将保存这个操作,但不是立即就执行了。

Redis学习11:持久化RDB/AOF_数据库_06

  • 执行ll查看rdb的大小与时间。
  • 工作原理:

Redis学习11:持久化RDB/AOF_redis_07

  • 那么如何验证这个工作过程呢?
  • 可以进行查看日志文件,来查看是否是这样的。
  • cat 6379.log
  • 可以查看到日志也是这么显示的。

bgsave与save总结

  • bgsave命令是针对save阻塞问题做的优化,redis内部涉及到的rdb操作都将采用bgsave的方式,save命令可以放弃使用的。

自动执行save rdb启动方式

Redis学习11:持久化RDB/AOF_数据库_08


Redis学习11:持久化RDB/AOF_持久化_09

  • 意思就是说,10s内有99个key了,那么就需要进行持久化。其实就是单位时间内达标了就进行bgsave存。
  • 配置的方式和案例如下:
  • Redis学习11:持久化RDB/AOF_redis_10

rdb三种启动方式对比

Redis学习11:持久化RDB/AOF_数据_11

  • bgsave起了一个新进程所以需要额外的内存消耗的。

Redis学习11:持久化RDB/AOF_数据_12


Redis学习11:持久化RDB/AOF_数据库_13

第二种持久化方案 AOF

RDB存储的弊端:

Redis学习11:持久化RDB/AOF_redis_14

  • 最后一个指的是无法时刻进行RDB,可能会有一些丢失。

Redis学习11:持久化RDB/AOF_数据库_15

AOF介绍

Redis学习11:持久化RDB/AOF_持久化_16

AOF写数据的过程

Redis学习11:持久化RDB/AOF_redis_17

  • 那么问题变成了如何控制命令同步到.aof文件中。
  • 一共有三种策略:
  • 每次、每秒、系统控制

Redis学习11:持久化RDB/AOF_数据_18

AOF功能开启

Redis学习11:持久化RDB/AOF_redis_19

  • 进入到conf目录下,然后更改conf文件就可以了。
  • 配置过程如下:

Redis学习11:持久化RDB/AOF_数据库_20


Redis学习11:持久化RDB/AOF_redis_21

  • 然后到客户端写一个set name 123,会发现.aof文件已经开始变化了。

Redis学习11:持久化RDB/AOF_数据_22

  • 也就是说always是可以每次都记住变化的。
  • 但是记住如果是get,.aof的大小是不会变化的,因为没有进行更改数据。
  • 然后可以查看这个文件。
  • Redis学习11:持久化RDB/AOF_redis_23


  • Redis学习11:持久化RDB/AOF_持久化_24


  • 如果改成 everysec的话是看不出来每次一存的区别的。因为每秒一存太快了。

AOF重写概念与命令执行

Redis学习11:持久化RDB/AOF_数据库_25


Redis学习11:持久化RDB/AOF_数据库_26


Redis学习11:持久化RDB/AOF_redis_27


Redis学习11:持久化RDB/AOF_redis_28

  • bg就是后台的意思,background。

Redis学习11:持久化RDB/AOF_数据库_29


Redis学习11:持久化RDB/AOF_数据库_30

  • 当执行重写之后,再次查看ll。然后发现变小了。
  • Redis学习11:持久化RDB/AOF_redis_31


  • Redis学习11:持久化RDB/AOF_持久化_32


  • 发现只剩下了345。
  • 类似消消乐,多个操作合并一个了。
  • Redis学习11:持久化RDB/AOF_redis_33

自动AOF重写

Redis学习11:持久化RDB/AOF_数据库_34

  • 一共有两种,一个是大小,一个是百分比。
  • 这个两个触发条件触发一个就会触发AOF了。
  • 在客户端输入info就可以看到上面说的系统数据值了。
  • Redis学习11:持久化RDB/AOF_redis_35


AOF的工作流程

Redis学习11:持久化RDB/AOF_数据_36


Redis学习11:持久化RDB/AOF_数据_37

RDB与AOF的区别

Redis学习11:持久化RDB/AOF_持久化_38

  • RDB类似整盘复制。
  • Redis学习11:持久化RDB/AOF_持久化_39


  • 比如说游戏的回档,玩家是可以接受的。所以可以用RDB,用来做阶段性的恢复。
  • 如果用了RDB,那么存储的时间要慎重考虑。
持久化的应用场景

Redis学习11:持久化RDB/AOF_持久化_40

  • 第一个主键id不适合用持久化,适合临时化。
  • 第二个热度数据也不适用。
  • 第三个不适用。因为数据库也有。
  • 第四个快速存储、快速消失的适合存起来。其次恢复这个就不用后台做大规模的重做。如果差一两个,那么激活码就多发一两个也没事。
  • 第五个操作先后顺序的话也适用redis存储。
  • 任务队列、消息队列也可以,但是用MQ更适合。
  • 第七个关联搜索不适用。
  • 黑白名单的控制:如果黑名单做的是长期策略,那么数据库肯定要存,就不需要redis了。而如果是短期策略,那么就不适合。(因为网吧或者校园网的ip进行黑名单了,那么如果直接封了网吧和校园网会导致其他的用户ip访问不了了。)
  • 排名功能适合做持久化,这种数据是不会存数据库的。
  • 最后一个应用按次结算,那么要不要持久化,可以这么想:如果不存,会不会出灾难性的结果,如果会出现,那么需要,如果不会出现,那么就不用管。




举报

相关推荐

0 条评论