zoukankan      html  css  js  c++  java
  • redis07-----Redis持久化配置

    Redis持久化配置
    
    持久化: 即把数据存储于断电后不会丢失的设备中,通常是硬盘.
    常见的持久化方式:
    
    主从:通过从服务器保存和持久化,如mongoDB的replication sets配置。
    淘宝是主服务器往内存里面写,从服务器往硬盘里面写。mysql,oracle往磁盘写通过操作生成二进制日志,突然断电可以通过日志恢复数据。
    couchDB无论增删改差都作用于文件上,文件本身就涵盖了日志信息。日志和文件结构是一体的。
    
    Redis的持久化有2种方式   1.rdb快照持久化  2.Aof日志
    
    rdb的工作原理:
    redis的数据是在内存里面,直接把内存的数据以快照(内存的映像文件)的方式,数据结构都搬过来,直接往内存中搬。
    每隔N分钟或N次写操作后, 从内存dump数据形成rdb文件,压缩,放在备份目录
    
    Rdb快照的配置选项conf文件:
    
    //从下向上看
    save 900 1      // 900秒内,有1条写入,则产生快照 
    save 300 1000   // 如果300秒内有1000次写入,则产生快照
    save 60 10000  // 如果60秒内有10000次写入,则产生快照
    (这3个选项都屏蔽,则rdb禁用,不导出了)
    
    stop-writes-on-bgsave-error  yes  // 后台备份进程出错时,主进程停不停止写入?
    rdbcompression  yes    // 导出的rdb文件是否压缩(文件太大了)
    Rdbchecksum   yes //  导入rbd恢复时数据时,要不要检验rdb的完整性
    Dbfilename  dump.rdb  //导出来的rdb文件名
    Dir  ./  //rdb的放置路径
    
    rdb的优势:恢复速度非常快。
    rdb的缺陷:在2个保存点之间,断电,将会丢失1-N分钟的数据(数据还在redis的内存中还没有持久化)。
    出于对持久化的更精细要求,redis增添了aof方式 append only file(追加文件持久化)
    Aof 的配置(aof和rdb可以同时存在)
    把执行的每条命令写文本文件中去,每执行一个命令就往文件去写速度就慢下来了,
    
    appendonly no # 是否打开 aof日志功能
    
    appendfsync always      # 每1个命令,都立即同步到aof. 安全,速度慢
    appendfsync everysec    # 折衷方案,每秒写1次
    appendfsync no         # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,操作系统也有缓冲4k大小。
    appendfilename    ./appendonly.aof    //文件目录
    
    no-appendfsync-on-rewrite  yes:  # 正在导出rdb快照的过程中,要不要停止aof的同步
    auto-aof-rewrite-percentage  100   #aof文件大小比起上次重写时的大小,增长率100%时,重写
    auto-aof-rewrite-min-size   64mb   #aof文件,至少超过64M时重写,否则刚开始时候很容易达到100%
    
    注: 在dump rdb过程中,aof如果停止同步,会不会丢失?
    答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.
    
    注: aof重写是指什么?
    aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里,以解决 aof日志过大的问题。
    比如重复修改同一个key,修改了100次,则存了100次,恢复的时候也要恢复100次。 aof重写是对同一个key的多次操作只记录最后的结果。
    
    问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
    答: aof。Rdb的恢复速度快因为是数据的内存映射,aof要逐条来执行。
    
    问: 2种是否可以同时用?
    答: 可以,而且推荐这么做
    
    问: 恢复时rdb和aof哪个恢复的快
    答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行
    redis 服务器端命令
    redis 127.0.0.1:6380> time  ,显示服务器时间 , 时间戳(秒), 微秒数
    1) "1375270361"
    2) "504511"
    
    redis 127.0.0.1:6380> dbsize  // 当前数据库的key的数量
    (integer) 2
    redis 127.0.0.1:6380> select 2
    OK
    redis 127.0.0.1:6380[2]> dbsize
    (integer) 0
    redis 127.0.0.1:6380[2]> 
    
    
    BGREWRITEAOF 后台进程重写AOF
    BGSAVE       后台保存rdb快照
    SAVE         保存rdb快照
    LASTSAVE     上次保存时间
    
    Slaveof master-Host port  , 把当前实例设为master的slave
    
    Flushall  清空所有库所有键 
    Flushdb  清空当前库所有键
    Showdown [save/nosave]
    
    注: 如果不小心运行了flushall, 立即 shutdown nosave ,关闭服务器
    然后 手工编辑aof文件, 去掉文件中的 “flushall ”相关行, 然后开启服务器,就可以导入回原来数据.
    
    如果,flushall之后,系统恰好bgrewriteaof了,那么aof就清空了,数据丢失.

     把rdb和aof的配置注释掉之后就不会进行持久化操作,那么重启redis之后之前插入的数据就没有了。所以是内存数据库。

  • 相关阅读:
    (视频) 《快速创建网站》 2.2 负载均衡简介和域名绑定操作
    (视频) 《快速创建网站》2.1 在Azure上创建网站及网站运行机制
    (视频) 《快速创建网站》1. 网站管理平台WordPress & 微软Azure 云计算简介
    (视频) 开源,免费和跨平台 - MVP ComCamp 2015 KEYNOTE
    【Flask教程01】helloworld程序
    如何在虚拟环境中安装工具包?
    如何使用虚拟环境?
    CentOS 使用ifconfig没有显示ip
    Python Web框架要点
    Python3.7&Django1.11.15 兼容性问题
  • 原文地址:https://www.cnblogs.com/yaowen/p/8278847.html
Copyright © 2011-2022 走看看