美文网首页
redis持久化

redis持久化

作者: 北你妹的风 | 来源:发表于2017-07-27 11:13 被阅读9次

    redis是一个支持持久化的内存数据库,经常用到的持久化方式有2种,一种是snapshotting(快照),这种方式也是redis默认的持久化方式;另一种是Append-only-flie(AOF)。下面分别介绍这两种持久化方式。

    快照持久化是默认的,这种方式就是将内存中的数据以快照的方式写到二进制文件中,文件默认的名字是dump.rdb。默认的快照保存配置如下:

    save 900 1#900秒内如果超过1个key被修改,则发起快照保存

    save 300 10#300秒内容如超过10个key被修改,则发起快照保存

    save 60 10000

    当然,这个配置是可以修改的。客户端也可以通过save命令或者bgsave命令通知redis强制进行一次快照持久化,这个操作是在主进程中进行的,由于redis是在主进程中处理客户端的请求,所以save命令会阻塞客户端请求,所以不推荐使用。另外需要注意的是,每次快照持久化都是讲内存中的数据全部写入到磁盘中,这势必会引起大量的磁盘IO操作,可能会引起性能问题。

    快照持久化有个问题,那就是如果redis服务器down掉的话,最后一次快照持久化的所有修改都会丢失。如果应用想不丢失任何数据的话,可以采用AOF进行持久化

    下面就来说说AOF持久化方式。AOF持久化方式会把每一次的写操作命令写到文件末尾(appendonly.aof),当redis服务器重启时会执行文件中的每个写命令,从而恢复数据。同步命令有三种方式:(默认为每秒同步一次)

    appendonly yes#启用aof持久化方式。注意:默认是不启动的

    # appendfsync always#每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

    appendfsync everysec#每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

    # appendfsync no#完全依赖os,性能最好,持久化没保证

    对于AOF这种方式,可以举个简单的例子,如果不小心执行了flushall 命令,可以暂停redis服务器,把AOF文件末尾的FLUSHALL命令移除掉,就会把数据恢复到FLUSHALL命令之前的状态

    相关文章

      网友评论

          本文标题:redis持久化

          本文链接:https://www.haomeiwen.com/subject/surfuttx.html