Redis教程

Redis学习日记(一) 持久化

本文主要是介绍Redis学习日记(一) 持久化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

redis官方持久化文档镇楼

Redis官方提供了两种持久化的方案:RDB和AOF。

RDB

对于RDB官方的定义是:The RDB persistence performs point-in-time snapshots of your dataset at specified intervals。翻译成中文的话就是:按规定的时间间隔执行数据集的时间点快照。简单的理解就是RDB会按一定的时间间隔去备份当前Redis内的数据。

简单的来说RDB持久化的方式一般适用于冷备。

RDB的优点

  1. 可以针对于不同实际时间点进行数据恢复
  2. 适合于冷备,运维可以设置定时任务将备份下来的数据传输到远程服务器,即使线上出现问题也可以恢复数据
  3. 在恢复数据的时候,因为RDB是数据的快照,恢复起来会优于AOF(AOF是基于写入命令)
  4. 提供Redis性能,RDB在进行快照的时候会fork一个子进程去持久化数据(同时父进程将不进行IO操作)

RDB的缺点

  1. 当数据量很大或者CPU性能不够好的情况下,RDB在fork子进程去备份快照的时候会需要一定的时间(甚至是几秒的时间),由于fork的时候父进程是不回去执行IO操作的,所以会影响到项目内的使用。如果是电商公司的话,利用Redis做秒杀或者数据缓存的操作,那么会出现很大问题。
  2. RDB的时间粒度过大,默认是五分钟或者更长时间去做一次备份。这也意味着如果出现异常情况,例如服务器断电或者Redis异常关闭的情况,会出现数据丢失的情况。

AOF

AOF (Append Only File): The AOF persistence logs every write operation received by the server, that will be played again at server startup, reconstructing the original dataset. Commands are logged using the same format as the Redis protocol itself, in an append-only fashion. Redis is able to rewrite the log in the background when it gets too big.(AOF会记录服务器接收的每个写入操作,这些操作将在服务器重启时执行,以恢复数据集。写入操作的命令使用与Redis协议本身相同的格式记录命令,并且方式是仅追加。当日志太大时,Redis可以在后台重写日志。)

翻译过来就是 : AOF会将每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销,所以很快。

其实这个有点类似于MySQL的bin log。

AOF的优势

  1. AOF采用的是后台线程fsync去写入命令,AOF是一秒一次去执行写入操作。那么即使丢失的话也是丢失的最后一秒的数据。
  2. AOF采用的是仅追加的日志,速度快且不会出现寻址损坏的问题。
  3. AOF的日志是易于理解和解析的,也十分适合做灾备。比如使用的FLUSHALL命令去刷新了所有内容,只要这段时间内没有执行日志重写,就可以通过AOF日志删除最后的FLUSHALL命令去恢复数据。

 

AOF的劣势

  1. 相同数据集的情况下,AOF的文件远大于RDB
  2. AOF开启之后,支持QPS会比支持RDB方式要低。毕竟要开启一个后台线程去异步执行写入操作

 

如何使用

一般建议是同时使用两种灾备方案。而且Redis官方正在将RDB和AOF统一为一个持久化模型。

当然,如果只关心数据且可以承受几分钟的数据丢失情况的话,可以仅使用RDB。

RDB的使用

修改Redis的配置文件,在内部加上以下内容,或者可以手动调用SAVE或BGSAVE命令

# 时间策略

save 900 1

save 300 10

save 60 10000

# 文件名称

dbfilename dump.rdb

# 文件保存路径

dir /home/work/app/redis/data/

# 如果持久化出错,主进程是否停止写入

stop-writes-on-bgsave-error yes

# 是否压缩

rdbcompression yes

# 导入时是否检查

rdbchecksum yes

AOF的使用

appendonly  yes        (默认no,关闭)表示是否开启AOF持久化: 

appendfilename “appendonly.aof”    AOF持久化配置文件的名称:

AOF持久化策略(默认每秒):

  appendfsync always (同步持久化,每次发生数据变更会被立即记录到磁盘,性能差但数据完整性比较好)

  appendfsync everysec (异步操作,每秒记录,如果一秒钟内宕机,有数据丢失)

  appendfsync no (将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的)

 

这篇关于Redis学习日记(一) 持久化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!