zoukankan      html  css  js  c++  java
  • redis的持久化相关操纵

    一.redis数据持久化(数据保存在硬盘上)

    1. 关系型数据库Mmysql持久化
      任何增删改语句都是在硬盘上操作(安全)
      断电,硬盘上数据还在

    2.非关系型数据库
      默认所有的增删改都是在内存中操作(高效不安全)
      断电以后内存数据不存在

      断电以后redis部分数据会丢失:丢失的数据是保存在在内存

        1.redis持久化操作(RDB)     

          redis提供了RDB(Redis DataBase)持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行。

          也可以再redis.conf中配置,定期执行

          RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

    RDB:默认的持久化操作,相当于快照,保存的是状态,在redis安装目录有个dump.rdb就是快照
      优点:(1)快照保存数据速度极快,还原熟读极快
         (2)适合灾难备份
      缺点:随时随地开启(容易占用系统资源),不适合小内存的机器使用
        (1)符合要求就会进行快照
          服务器正常关闭 照快照
          key满足一定条件时候 照快照
        (2)何时开启快照
          服务器正常关闭时候,照一次快照
          key满足一定条件时候 照快照 
        redis.conf文件配置,满足一下任一条件:
          900秒(15分钟至少有1个key发生变化),照快照
          300秒内,至少有10key改变,照快照
          60秒内,至少有10000个改变,照快照     

       2.RDB的配置使用

        1.在redis启动文件中写入如下配置

    port 6379
    daemonize yes
    dir /data/6379                   # 定义持久化文件存储位置
    pidfile /data/6379/redis.pid     # redis进程pid文件
    loglevel notice                  # 日志级别
    logfile "/data/6379/redis.log"   # redis日志log文件
    protected-mode yes               # 保护模式
    dbfilename  dbmp.rdb             # rdb持久化文件名
    #bind 10.0.0.10  127.0.0.1       # redis绑定地址
    #requirepass redhat              # redis登录密码
    save 900 1                       # rdb机制 每900秒 有1个修改记录
    save 300 10                      # 每300秒        10个修改记录
    save 60 10000                    # 每60秒内        10000修改记录
    View Code

      

      2.启动redis服务端

      3.登录redis设置一个key

      4.此时检查目录,/data/6379底下没有dbmp.rdb文件

      

      5.通过save触发持久化,将数据写入RDB文件

    127.0.0.1:6379> set age 18
    OK
    127.0.0.1:6379> save
    OK

    注意: 由于这个dbmp.rdb文件是用来存储持久化数据的,理所当然如果被删除了的话,数据就会消失

     3.REDIS的持久化(AOF)

        AOF(append-only log file)
        记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
        AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
        优点:最大程度保证数据不丢失 (比RDB要好,因为RDB有可能丢失数据)
        缺点:日志记录非常大

    AOF:适合内存比较小的计算机,使用日志功能来保存数据
    
        默认是关闭:所有三种选项
        每秒同步(安全性,但是不浪费资源)
        每修改同步:只要有key变化语句,就进行AOF保存数据 (比较安全,但是占用资源)
        不同步(默认):不进行任何持久化操作
    
        AOF操作:只记录key变化的语句
      
        AOF配置:
          appenddonly 改为yes
    
      
          always:每修改同步
          everysecond:每秒同步
          no :从不同步
        
           
        优点:持续占用极少量资源
        缺点:日志文件会特比大

      4.开启AOF的操作流程

        1.准备aof配置文件 redis.conf

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    requirepass redhat
    save 900 1
    save 300 10
    save 60  10000
    appendonly yes
    appendfsync everysec

        2.启动redis服务

    redis-server /etc/redis/6379.conf 

        3.检查redis数据目录/data/6379/是否产生了aof文件

    [root@qishi bin]# ll /etc/redis
    total 72
    -rw-r--r--. 1 root root 57775 Apr 20 15:11 6379.conf
    -rw-r--r--. 1 root root   139 Apr 20 14:27 6380.conf
    -rw-r--r--. 1 root root    62 Apr 20 15:12 appendonly.aof
    drwxr-xr-x. 3 root root    18 Apr 16 19:16 data

    
    

          4..登录redis-cli,写入数据,实时检查aof文件信息

    tail -f /etc/redis/appendonly.aof 
    
    

         5.设置新key,检查aof信息,然后关闭redis,检查数据是否持久化

    redis-cli -a redhat shutdown
    
    redis-server /etc/redis.conf
    
    redis-cli -a redhat

       文件的位置:不管是是dump.rdb还是appendonly.aof文件的路径都是通过配置文件的dir选项指定的

    二.redis不重启,从RDB切换到AOF

      1.确保redis版本在2.2以上

    redis-server -v
    Redis server v=4.0.6 sha=00000000:0 malloc=libc bits=64 build=1a3f9c0b300

      2.配置RDB持久化,确保没有AOF的配置

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录

      3.启动redis服务端

    redis-server /etc/redis/6379.conf 
    2981:C 20 Apr 15:33:16.356 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0O
    2981:C 20 Apr 15:33:16.356 # Redis version=4.0.6, bits=64, commit=0000000
    2981:C 20 Apr 15:33:16.356 # Configuration loaded

      4.登录redis-cli插入数据,手动持久化

    127.0.0.1:6379> keys *
    1) "dajiba"
    2) "wojiushi"
    127.0.0.1:6379> set wocao nidayede
    OK
    127.0.0.1:6379> save
    OK

      5.检查RDB文件

    dump.rdb

      6.备份RDB文件

    #进入文件夹
    cp dump.rdb dump.rdb.bak

      7. 执行命令,开启AOF持久化

    #看清楚大小写啊
    
    127.0.0.1:6379> CONFIG set appendonly yes
    OK
    127.0.0.1:6379> CONFIG SET save ""
    OK  

      注意: 此命令开启的AOF功能只是临时启用,redis服务重启之后就会失效,因为配置文件并没有AOF的配置。

      不过没关系, 我们的目的是不重启切换至AOF

     8. 验证旧的RDB数据库数据是否转入AOF, 以及AOF持久化文件是否正常写入

    #登录客户端,查看key的熟练
    127.0.0.1:6379> keys *
    1) "dajiba"
    2) "wojiushi"
    3) "wocao"
    
    #查看这些数据是否同步否appendonl.aof文件中了
    tail -f appendonle.aof
    
    
    #增加key
    127.0.0.1:6379> set nidaye adsd
    OK
    
    #在查看新增的数据是否到appendonly.aof中
    tail -f appendonle.aof

       此时RDB已经正确切换AOF,注意还得修改redis.conf添加AOF设置,不然重启后,通过config set的配置将丢失

      

     

  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10741111.html
Copyright © 2011-2022 走看看