redis 持久化存储数据

在用scrapy-redis分布式抓爬虫的时候,忘记对redis进行持久化存储了,第二天打开redis里面数据没了。。。所以要研究下redis持久化的问题。。。redis分两种持久化分别是RDB和AOF方式。

1. RDB

RDB是快照,RDB是一个文件后缀是.rdb, 是某一时刻Redis中所有数据的副本。可以随便复制到别的电脑去。然后启动redis的就是就有数据了。所以需要设置rdb的文件名和存储位置,写在redis的redis.conf文件中。

# RDB文件名
dbfilename "dump.rdb"
# RDB文件和AOF文件路径
dir "/Users/walle/Documents/redisConfig/db"
save 900 1
save 300 10
save 60 10000

有4中情况可以触发把数据保存为dump.rdb

 

1.1 使用SAVE或者BGSAVE

 

在客户端中redis-cli 中,可以输入save,来立即保存一个rdb文件。这个时候redis不会响应其他任何操作,适用于redis没有在工作或者在处理轻微工作的情况,好处是不会增加什么内存。

而bgsave,是redis fork来创建一个子进程,然后子进程负责将快照写入磁盘,父进程依然继续处理命令,相当于热保存了,坏处是内存会飙升1倍

 

1.2 根据多长时间内的写操作数量会自动触发gbsave

 

save

save 900 1 表示 900秒内如果有一次写入操作,就保存

 

1.3 shutdown 命令会save一次

 

redis-cli 中shutdown,会保存一次,但是kill掉不会保存。所以用shutdown命令非常重要。


1.4 主从关系会保存

 

如果是redis-cli 中通过slaveof 来变成slave redis,也会在本地生成rdb文件

参考《Redis-主从复制》

2. AOF 方式

# redis默认关闭AOF机制,可以将no改成yes实现AOF持久化
appendonly yes
# AOF文件
appendfilename "appendonly.aof"
# AOF持久化同步频率,always表示每个Redis写命令都要同步fsync写入到磁盘中,但是这种方式会严重降低redis的速度;everysec表示每秒执行一次同步fsync,显示的将多个写命令同步到磁盘中;no表示让操作系统来决定应该何时进行同步fsync,Linux系统往往可能30秒才会执行一次
# appendfsync always
# appendfsync everysec
appendfsync no

# 在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后在写入。redis中默认为no  
no-appendfsync-on-rewrite no   
# 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。  
auto-aof-rewrite-percentage 100  
#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。  
auto-aof-rewrite-min-size 64mb  
# Redis再恢复时,忽略最后一条可能存在问题的指令(因为最后一条指令可能存在问题,比如写一半时突然断电了)
aof-load-truncated yes
#Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。
aof-use-rdb-preamble yes

上面dir 设置的目录,aof文件也会保存在那里。

AOF 相当于把写的命令写入到AOF文件的末尾,所以AOF文件会比RDB文件大很多,因为每一步都记录了。所以变的非常大的时候,redis可以执行bgrewriteaof操作,去掉冗余的合成一些命令。默认是64MB开始这样判断,每次翻倍的时候,就重写,来减少aof文件的大小。

可以同时使用rdb和aof 持久化

需要注意的是:如果同时开启aof和rdb,默认是只读aof的,如果aof文件是0kb,就没数据了,即使rdb有数据的情况下。

http://www.waitingfy.com/archives/3227

 

你可能感兴趣的:(redis)