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的配置将丢失

      

     

  • 相关阅读:
    DAY7-面向对象之封装
    Java遇到的问题、错误——持续更新
    008单例、继承、final
    java一些使用
    2.1端口扫描器
    PyCharm设置
    常用算法
    PyCharm最新2018激活码,最新方法
    004数组
    042多进程
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10741111.html
Copyright © 2011-2022 走看看