redis缓存持久化 2018-01-17

redis持久化

可参照:

http://blog.csdn.net/jackpk/article/details/30073097
http://blog.csdn.net/canot/article/details/52886923

redis的持久化分为两种:

  1. RDB(redis database)
    • 将缓存放到一个文件中,默认一段时间去存储一次
    • 会将内容先放到缓存文件,持久化结束之后,就用缓存文件代替上一次的持久化文件
    • 优点:会调用子进程来保持持久化,不会有数据库I/O
    • 缺点:如果持久化的时候数据库丢失了数据,因为是’覆盖的‘所以,就找不到数据了,故适用于不太重要的数据
    • 总结:rdb文件小,易备份,易恢复,恢复快
  2. AOF(append only file)
    • 默认每秒去存储历史命令
    • 保存的是数据的历史指令,恢复数据的时候是将命令从前到后在执行一遍
    • 优点:遇突发情况的话能找到以前的记录,且数据丢失较少(1s)
    • 缺点:每次都有IO操作,对服务器压力较大
    • 总结:回复慢,数据完整性好,不易备份

第一种:RDB

  1. 配置缓存项:

    位于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的时候都会自动保存。

  2. 配置redis日志:

    在redis.conf的logfile 后面配置,默认是没有的,需要手动配置,配置之后会有操作日志

    logfile /usr/local/db/redis.log
  3. 使用:

    可以通过客户端来手动保存redis缓存

    redis-cli -h 127.0.0.1 -p 5432 save

    我们可以定期保存dump.rdb文件,以防数据误操作,可以在dir的位置放上我们想要的缓存文件,redis服务启动的时候就会自动读取了。

第二种:AOF

  1. redis配置

    默认是关闭的,可以通过redis.conf:appendonly yes 开启

    appendfilename 设置aof备份文件名,默认为:appendonly.aof

    appendsync everysec 配置同步的时间(还有always立即同步,no:根据系统同步,一般选择everysec)

  2. 使用方法

    手动保存

    redis-cli -h ip -p port bgrewriteaof

    如果因为误删如:flushall, 而把数据库的缓存信息全部删除了,想要恢复的话也很简单,找到 appendonly.aof 文件,把最下面的那行命令:flushall 删除,然后重启服务即可。

    注意:有时候我们的服务器突然停止运行,会导致数据库:

    • 写入的命令丢失

      这时候最多只丢失一秒的命令数据,因为前面设置了everysec

    • 也可能导致:服务器写入appendonly.aof的命令语句不全,系统有redis-check-aof可以轻松的修复一些常见错误引发的语句问题,我们也可以打开appendonly.aof文件,手动修改,因为是非常易读的。

3.从rdb转到aof存储的注意点:

如果你一直用的是rdb持久化,想要转到aof持久化需要注意:

  1. 第一步:

    修改redis.conf文件的: no-appendfsync-rewrite yes(默认是no)

  2. 第二步:

    重启redis-server(可以kill,再重启)
    迁移:redis-cli -h 127.0.0.1 -p 6379 bgrewriteaof

  3. 第三步:

    修改 redis.conf 的:appendonly yes(默认no)

    然后重启redis服务,就会迁移过去了

4.使用redis-check-aof工具:

redis-check-aof --fix ./appendonly.aof

这是aof文件损坏的时候用这个命令补全,但是为什么我的补全会丢失以前的记录???
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章