Redis简单介绍2-持久化

Posted 心流时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis简单介绍2-持久化相关的知识,希望对你有一定的参考价值。


文章目录

1. 持久化类型(主从复制时,主节点自动触发)


2. RDB(Redis DateBase)

2.1 自动触发rdb持久化,修改redis.conf配置文件

2.1.1 5秒内2次修改就会自动触发rdb持久化

2.1.2 修改dump文件保存路径

2.1.3 指定rdb文件名称

修改redis.conf配置文件

2.1.4 配置完成之后重启redis-server

2.1.5 5秒内执行两次修改自动触发rdb持久化


2.1.6 当执行flushdb、flushall时也会触发持久化,但生成的持久化文件是空的,没有意义

2.1.7 在redis-cli中执行shutdown(主动的关机)时也会持久化,生成新的持久化文件


执行shutdown

生成新持久化文件

将持久化文件删除(改名),重新启动redis-server,发现redis中没有了原来的数据,也就是说没有持久化文件,重启redis就没有了原来的数据。


当有redis持久化文件时,重启redis-server,会将文件中的数据恢复到redis内存中

2.2 手动触发rdb持久化

2.2.1 手动触发时机:有时候还未达到自动触发rdb的条件,我们就想触发持久化,这时候可以选择手动触发

2.2.2 save 在主程序执行中会阻塞当前redis服务器,直到持久化工作完成,禁止使用

执行save命令期间,redis不能处理其他命令,线上禁止使用

2.2.3 bgsave redis会fork一个子进程进行持久化,不会阻塞redis服务器,使用这个

redis默认是使用bgsave对当前内存中的所有数据做快照,这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据

2.2.4 lastsave 获取上一次持久化的时间戳

2.2.5 date -d @时间戳 根据时间戳获取时间(不是在redis服务器中,在linux中,redis命令不区分大小写,linux命令区分)

2.2.6 rdb优点

  1. 适合大规模的数据恢复
  2. 可以定时备份(redis.conf 中的save可以指定备份时间和频率)
  3. rdb文件再内存中的加载速度要比aof快得多

2.2.7 rdb缺点

  1. rdb持久化需要满足一定的时间条件,如果在不满足条件时redis服务器宕机了,就会发生数据丢失的问题

2.2.8 redis宕机,rdb未持久化,丢失数据

之前设置的是5秒内两次修改会自动触发rdb持久化(shutdown,redis-server /myredis/redis7.conf重启都会自动触发持久化,kill不会)

2.2.9 /usr/local/bin/redis-check-aof /myredis/dumpfiles/dump6379.rdb 修复rdb文件

2.2.10 总结触发rdb快照的情况有哪些

  1. 配置文件中默认的快照配置
  2. 手动执行save/bgsave命令
  3. 执行flush/flushall命令也会产生dump.rdb文件,但文件是空的
  4. 执行shutdown且没有设置开启aof持久化
  5. 主从复制时,主节点自动触发

2.2.11 禁用快照(rdb)

  1. redis-cli config set save “” redis-server重启就会失效(重新执行redis-server redis.conf并不会重启redis-server,除非redis-server进程已经不存在,不过这种情况应该叫启动而不是重启)
  2. 配置文件修改(建议使用这种方式)

2.2.12 redis.conf snapshotting模块的参数介绍

  1. stop-writes-on-gbsave-error
  2. rdbcompression
  3. rdbchecksum
  4. rdb-del-sync-files

2.2.13 rdb总结

3. AOF(Append-only file)

3.1 以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录)

只追加文件,不可以改写文件

3.2 aof持久化工作流程

3.3 aof缓冲区内容同步到aof持久化文件的三种策略

  1. always 同步写回,命令到达redis-server,然后到达redis缓冲区,就直接将写命令落入磁盘
  2. everysec(默认策略) 每秒写回,每秒钟一次将缓冲中的内容写入磁盘
  3. no 不是不持久化,而是持久化时机由操作系统控制

3.4 修改配置文件redis.conf

3.4.1 开启aof

3.4.2 使用默认写回策略

3.4.3 持久化文件保存路径

  1. redis6版本,aof和rdb都是dir
  2. redis7版本,rdb还是dir,aof是变成dir的路径+appenddirname的路径

    所以路径是/myredis/dumpfiles/appendonlydir/

3.4.4 更改aof持久化文件的名称

  1. redis6版本,aof是

  2. redis7版本,aof文件采用multi part aof的设计,由三个文件组成
    这三个文件的名称前缀还是appenddirname的值

    base是基础;incr是增量;base和incr会变成history,会自动删除,我们感知不到;manifest文件来跟踪管理这些aof文件

3.4.5 重启redis-server,5秒内修改2条或以上此数据


rdb和aof持久化文件都会改变

3.4.6 日常修改命令,会改变aof文件中的incr文件

3.4.7 rdb和aof同时存在时,可以将rdb的文件删除,aof文件可以写回到磁盘中做数据恢复

3.5 破坏aof三个文件中日常频繁使用到的incr.aof文件,将会导致redis-server无法正常启动

  1. 关机
  2. 修改incr.aof文件

  3. 重启redis-server
  4. 发现重启失败

3.6 redis-check-aof --fix appendonly.aof.1.incr.aof 修复文件

  1. redis-check-aof --fix appendonly.aof.1.incr.aof (–fix必须加,否则没法删除掉incr中的错误命令)
  2. 发现incr中的错误命令被删除了
  3. 发现修复后服务可以启动成功了

3.7 aof优点

  1. 数据同步好:默认同步策略是1秒钟将缓冲区的写命令写入磁盘一次,所以最多也就丢失一秒钟的数据
  2. 假如不小心执行了flushdb或flushall,则只需要将incr.aof文件中的这个命令删除即可恢复原来的数据,这点rdb做不到

3.7 aof缺点

  1. aof文件通常比相同数据量的rdb文件大
  2. aof比rdb慢(感觉应该是rdb直接是二进制文件,而incr.aof文件是普通的文本文件,当然注意原因还是实现原理不同)

3.8 aof重写机制:启动aof文件的内容压缩,只保留可以恢复数据的最小指令集


案例:
set name xiaohua
set name xiaohua1
set name xiaohua2
就可以重写为
set name xiaohua2

3.8.1 触发aof文件重写的条件

3.8.1.1 aof文件重写自动触发

手动触发:bgrewriteaof

  • 关闭aof和rdb的混合模式

  • 这种时候rdb和aof同时开启,但只有rdb持久化文件会更新

  • 若只删除rdb持久化文件,aof持久化文件可以恢复数据:

  • 但是将rdb和aof持久化文件全部删除,重启redis-server,则只会生成aof持久化文件,但是执行命令后还是会生成rdb文件

  • 新增命令:

  • aof自动重写,会将重写后的命令放入base和incr中,base是基础数据,非最新一次的命令,incr是轻量级的,是最新一次redis-cli连接redis-server执行的命令

3.8.1.2 aof文件重写手动触发:bgrewriteaof

3.8.1.3 aof文件重写原理

## 3.9 配置文件redis.conf append only模块参数介绍

3.10 aof小总结

4. RDB+AOF混合持久化

4.1 支持两者共存,混合使用,默认开启rdb,但开启aof后,他俩可以共存,只是aof优先级更高;

4.2 在同时开启rdb和aof持久化时,重启时只会加载aof文件,不会加载rdb文件

4.2 推荐使用rdb+aof的混合模式

结合了RDB和AOF的优点,既能快速加载又能避免丢失过多的数据。

5. No Persistence(纯缓存模式)

5.1 禁用rdb: save “” 但仍可以使用命令save、bgsave生成rdb文件,等再次开启rdb,就可以使用rdb文件恢复数据了

5.2 禁用aof:appendonly no 但仍可以使用命令bgrewriteaof生成aof文件,等再次开启aof,就可以使用aof文件恢复数据了

6. 查看redis配置

6.1 config get requirepass 查看redis密码

6.2 config get port 查看端口

6.3 config get dir 查看保存rdb文件的目录路径

6.4 不可以将dump.rdb的备份文件和redis服务器放在同一台机器,必须分开存储,以防机器损坏后备份文件也没了

初识Redis系列之一:简单介绍

一:Redis是什么?

  Redis全称:REmote DIctionary Server(Redis) 。Redis是一个由Salvatore Sanfilippo写的key-value存储系统,ANSI C语言编写;

   特点:开源免费、单线程、大并发、遵守BSD协议、支持网络、可基于内存亦可持久化、高性能的key-value数据库、提供多种语言的API

  1:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;

  2:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;

  3:Redis支持数据的备份,即master-slave模式的数据备份;

二:Redis与其他key-value存储有什么不同?

  1:Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象;

  2:Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问;

 

三:Redis的优劣势有哪些?

  优势:

  1:性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s ;

  2:丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;

  3:原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行;

  4:丰富的特性:Redis还支持 publish/subscribe, 通知, key 过期等等特性;

  

  劣势:

  1:数据量过大影响使用,毕竟数据是装在内存中;

  2:不具备自动容错和恢复功能;

 

以上是关于Redis简单介绍2-持久化的主要内容,如果未能解决你的问题,请参考以下文章

初识Redis系列之一:简单介绍

Redis数据库介绍

redis的介绍和安装

非看不可的Redis持久化

Centos 6.7 中 Redis-3.2.8的安装

redis学习——数据持久化