redis持久化
可参照:
http://blog.csdn.net/jackpk/article/details/30073097
http://blog.csdn.net/canot/article/details/52886923
redis的持久化分为两种:
- RDB(redis database)
- 将缓存放到一个文件中,默认一段时间去存储一次
- 会将内容先放到缓存文件,持久化结束之后,就用缓存文件代替上一次的持久化文件
- 优点:会调用子进程来保持持久化,不会有数据库I/O
- 缺点:如果持久化的时候数据库丢失了数据,因为是’覆盖的‘所以,就找不到数据了,故适用于不太重要的数据
- 总结:rdb文件小,易备份,易恢复,恢复快
- AOF(append only file)
- 默认每秒去存储历史命令
- 保存的是数据的历史指令,恢复数据的时候是将命令从前到后在执行一遍
- 优点:遇突发情况的话能找到以前的记录,且数据丢失较少(1s)
- 缺点:每次都有IO操作,对服务器压力较大
- 总结:回复慢,数据完整性好,不易备份
第一种:RDB
配置缓存项:
位于redis.conf中: dir /usr/local/var/db/redis/
系统会自动在当前位置建立一个名为dump.rdb的文件,每次redis-server启动的时候就会自动从这个文件上读取缓存,而且有默认的缓存时间dir /usr/local/var/db/redis/ save 900 1 save 300 10 save 60 10000
意思就是900s内有一个请求的话会保存,300s内有10个修改项的时候会保存,60s内有10000个修改项的话会保存,经过测试:貌似每次关闭redis-server的时候都会自动保存。
配置redis日志:
在redis.conf的logfile 后面配置,默认是没有的,需要手动配置,配置之后会有操作日志
logfile /usr/local/db/redis.log
使用:
可以通过客户端来手动保存redis缓存
redis-cli -h 127.0.0.1 -p 5432 save
我们可以定期保存dump.rdb文件,以防数据误操作,可以在dir的位置放上我们想要的缓存文件,redis服务启动的时候就会自动读取了。
第二种:AOF
redis配置
默认是关闭的,可以通过redis.conf:appendonly yes 开启
appendfilename 设置aof备份文件名,默认为:appendonly.aof
appendsync everysec 配置同步的时间(还有always立即同步,no:根据系统同步,一般选择everysec)
使用方法
手动保存
redis-cli -h ip -p port bgrewriteaof
如果因为误删如:flushall, 而把数据库的缓存信息全部删除了,想要恢复的话也很简单,找到 appendonly.aof 文件,把最下面的那行命令:flushall 删除,然后重启服务即可。
注意:有时候我们的服务器突然停止运行,会导致数据库:
写入的命令丢失
这时候最多只丢失一秒的命令数据,因为前面设置了everysec
- 也可能导致:服务器写入appendonly.aof的命令语句不全,系统有redis-check-aof可以轻松的修复一些常见错误引发的语句问题,我们也可以打开appendonly.aof文件,手动修改,因为是非常易读的。
3.从rdb转到aof存储的注意点:
如果你一直用的是rdb持久化,想要转到aof持久化需要注意:
第一步:
修改redis.conf文件的: no-appendfsync-rewrite yes(默认是no)
第二步:
重启redis-server(可以kill,再重启)
迁移:redis-cli -h 127.0.0.1 -p 6379 bgrewriteaof第三步:
修改 redis.conf 的:appendonly yes(默认no)
然后重启redis服务,就会迁移过去了
4.使用redis-check-aof工具:
redis-check-aof --fix ./appendonly.aof
这是aof文件损坏的时候用这个命令补全,但是为什么我的补全会丢失以前的记录???