redis的持久化相关操纵

Posted 阿布alone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的配置将丢失

  

 

以上是关于redis的持久化相关操纵的主要内容,如果未能解决你的问题,请参考以下文章

Redis的相关总结

Redis的相关总结

redis学习--redis的AOF持久化相关配置和操作

3redis.conf中的持久化相关配置

Redis相关知识整理

带你整理面试过程中关于Redis 中的持久化的相关知识点