ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis持久化存储数据(rdb和aof)

2022-03-06 02:02:52  阅读:199  来源: 互联网

标签:aof grep rdb redis 6379 mcw01 root


 

rdb持久化存储数据

总的

redis持久化
    防止数据丢失,持久化到本地,以文件形式保存
    
持久化的方式 ,两种  aof和 rdb模式


1.触发机制,
    -    手动执行save命令
    -    或者配置触发条件  save  200   10   #在200秒中内,超过10个修改类的操作

2.建立redis配置文件,开启rdb功能

配置文件  s21_rdb.conf 内容如下 ,有关rdb的配置参数是     dbfilename  dbmp.rdb  ,一个是 save 900 1   

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379                      #定义持久化文件存储位置
    dbfilename  s21redis.rdb                #rdb持久化文件
    bind  127.0.0.1            #redis绑定地址
    requirepass redhat                    #
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录

    save  20  2  #在20秒内,超过2个修改类的操作

当没有持久化存储时,停掉服务数据就丢失

[root@mcw01 ~/redis]$ redis-cli  -h 10.0.0.11 -p 6379  #查看有三个key
10.0.0.11:6379> auth mcw123
OK
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> 
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24392      1  0 19:10 ?        00:00:21 redis-server 10.0.0.11:6379
[root@mcw01 ~/redis]$ kill 24392  #杀掉redis服务
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ redis-server mcwRedis.conf  #重新启动redis服务
24590:C 05 Mar 23:08:45.304 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24590:C 05 Mar 23:08:45.304 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=24590, just started
24590:C 05 Mar 23:08:45.304 # Configuration loaded
[root@mcw01 ~/redis]$ redis-cli  -h 10.0.0.11 -p 6379  #重连
10.0.0.11:6379> auth mcw123
OK
10.0.0.11:6379> keys *  #查看三个key已经丢失
(empty list or set)
10.0.0.11:6379> 



redis持久化配置文件:

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
dbfilename  mcwredis.rdb            
bind  127.0.0.1                       
save 900 1     
save 300 10  
save  60  10000   

演示save 20 2 #持久化数据

#在20秒内,超过2个修改类的操作就做持久化保存



[root@mcw01 ~/redis]$ ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   mcwRedis.conf  redis.conf  runtest-cluster   sentinel.conf  tests
BUGS             COPYING       INSTALL  MANIFESTO  README.md      runtest     runtest-sentinel  src            utils
[root@mcw01 ~/redis]$ vim rdbRedis.conf
[root@mcw01 ~/redis]$ mkdir -p /data/6379
[root@mcw01 ~/redis]$ cat rdbRedis.conf #配置在20秒内,超过2个修改类的操作就做持久化保存
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
dbfilename  mcwredis.rdb            
bind  127.0.0.1                       
save 20 2     
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24591      1  0 23:08 ?        00:00:02 redis-server 10.0.0.11:6379
[root@mcw01 ~/redis]$ kill 24591
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ redis-server rdbRedis.conf #使用这个配置文件启动服务
[root@mcw01 ~/redis]$ ls /data/
6379
[root@mcw01 ~/redis]$ ls /data/6379/  #查看只有个日志文件,无rdb文件
redis.log
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> set name1 mcw
OK
127.0.0.1:6379> set name2 mcw2  #20秒时间内添加两条数据
OK
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ ls /data/
6379
[root@mcw01 ~/redis]$ ls /data/6379/  #查看已生成rdb文件
mcwredis.rdb  redis.log


已生成rdb文件了,重启服务,然后进去看到数据还存在的。也就是只要保存进这个rdb文件,那么即使服务停止重启,也不会丢失保存下来的数据
[root@mcw01 ~/redis]$ ls /data/6379/  #查看已生成rdb文件
mcwredis.rdb  redis.log
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24625      1  0 23:32 ?        00:00:00 redis-server 127.0.0.1:6379
[root@mcw01 ~/redis]$ kill 24625
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ redis-server rdbRedis.conf 
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> keys *
1) "name1"
2) "name2"
127.0.0.1:6379> get name1
"mcw"
127.0.0.1:6379> 

手动save持久化数据

[root@mcw01 ~/redis]$ ls
00-RELEASENOTES  BUGS          COPYING  INSTALL   MANIFESTO      rdbRedis.conf  redis.conf  runtest-cluster   sentinel.conf  tests
6379             CONTRIBUTING  deps     Makefile  mcwRedis.conf  README.md      runtest     runtest-sentinel  src            utils
[root@mcw01 ~/redis]$ vim rdbRedis.conf 
[root@mcw01 ~/redis]$ cat rdbRedis.conf #修改配置文件1000秒内插入10条才触发持久化保存数据
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
dbfilename  mcwredis.rdb            
bind  127.0.0.1                       
save 1000 10     
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24657      1  0 23:41 ?        00:00:00 redis-server 127.0.0.1:6379
[root@mcw01 ~/redis]$ kill 24657  #停掉服务
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ rm -rf /data/6379/*  #删除原来的数据
[root@mcw01 ~/redis]$ redis-server rdbRedis.conf  #用新配置文件启动服务
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name1 mcw1
OK
127.0.0.1:6379> set name2 mcw2  #添加两条数据
OK
127.0.0.1:6379> keys *
1) "name2"
2) "name1"
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ ls /data/6379/  #查看此时还没有持久化保存数据,没有达到save的条件
redis.log
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> keys * 
1) "name2"
2) "name1"
127.0.0.1:6379> save  #重新进入,手动执行save命令持久化保存数据
OK
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ ls /data/6379/  #发现已经生成持久化rdb文件。说明save保存数据生效
mcwredis.rdb  redis.log
[root@mcw01 ~/redis]$ 

aof持久化存储数据

总的

3.第二个机制 aof机制 ,将你的修改类的操作命令,追加到日志文件中

修改aof配置文件,添加如下参数,核心功能参数是 

appendonly yes
appendfsync  always    总是修改类的操作
             everysec   每秒做一次持久化
             no     依赖于系统自带的缓存大小机制



创建aof配置文件s21aof.conf   ,内容如下

详细步骤

新增后两条配置
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                               
appendonly yes
appendfsync everysec



[root@mcw01 ~/redis]$ ls
00-RELEASENOTES  aofRedis.conf  CONTRIBUTING  deps     Makefile   mcwRedis.conf  README.md   runtest          runtest-sentinel  src    utils
6379             BUGS           COPYING       INSTALL  MANIFESTO  rdbRedis.conf  redis.conf  runtest-cluster  sentinel.conf     tests
[root@mcw01 ~/redis]$ cat aofRedis.conf  #查看aof配置
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
appendonly yes
appendfsync everysec
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24760      1  0 00:02 ?        00:00:00 redis-server *:6379
[root@mcw01 ~/redis]$ kill 24760  #杀掉redis服务
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ rm -rf /data/6379/*  #删除旧的数据
[root@mcw01 ~/redis]$ redis-server aofRedis.conf   #使用aof配置启动服务
[root@mcw01 ~/redis]$ ls /data/6379/  #查看已经生成aof文件,但是还没有数据。
appendonly.aof  redis.log

    
当我再开一个窗口时,登录上时,执行keys *,是没有往aof里添加内容的。
[root@mcw01 ~]$ redis-cli 
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name mcw
OK
127.0.0.1:6379> 
    
当执行了set name mcw 这种新增语句时,就将语句写进了aof文件,如下
[root@mcw01 ~/redis]$ tailf /data/6379/appendonly.aof 

*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$3
mcw
^C
[root@mcw01 ~/redis]$


当我杀掉redis进程后,重新用配置文件启动服务,因为数据已经保存进aof文件了,所以没有丢失数据
[root@mcw01 ~/redis]$ ls /data/6379/
appendonly.aof  redis.log
[root@mcw01 ~/redis]$ ls
00-RELEASENOTES  aofRedis.conf  CONTRIBUTING  deps     Makefile   mcwRedis.conf  README.md   runtest          runtest-sentinel  src    utils
6379             BUGS           COPYING       INSTALL  MANIFESTO  rdbRedis.conf  redis.conf  runtest-cluster  sentinel.conf     tests
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24801      1  0 00:04 ?        00:00:00 redis-server *:6379
[root@mcw01 ~/redis]$ kill 24801
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ redis-server aofRedis.conf 
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"mcw"
127.0.0.1:6379> 

不重启redis将rdb备份修改为aof备份

4.rdb模式下的redis持久化,不重启切换为 aof模式

    环境准备
    1.准备一个有数据的rdb模式的redis数据库
        准备rdb配置文件
            daemonize yes
            port 6379
            logfile /data/6379/redis.log
            dir /data/6379                      #定义持久化文件存储位置
            dbfilename  s21redis.rdb                #rdb持久化文件
            bind  127.0.0.1            #redis绑定地址
            requirepass redhat                    #
            save 900 1                    #rdb机制 每900秒 有1个修改记录
            save 300 10                    #每300秒        10个修改记录
            save 60  10000                #每60秒内        10000修改记录

            save  20  2  #在20秒内,超过2个修改类的操作

        #详细看博客https://www.cnblogs.com/pyyu/p/10061526.html

    2.注意想要永久切换为aof,还得修改配置文件方可

 

准备环境:
[root@mcw01 ~/redis]$ ls
00-RELEASENOTES  aofRedis.conf  CONTRIBUTING  deps     Makefile   mcwRedis.conf  README.md   runtest          runtest-sentinel  src    utils
6379             BUGS           COPYING       INSTALL  MANIFESTO  rdbRedis.conf  redis.conf  runtest-cluster  sentinel.conf     tests
[root@mcw01 ~/redis]$ cp rdbRedis.conf 2rdbRedis.conf  
[root@mcw01 ~/redis]$ cat 2rdbRedis.conf  #复制过来一份rdb的配置文件
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
dbfilename  mcwredis.rdb            
bind  127.0.0.1                       
save 1000 10     
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24850      1  0 00:14 ?        00:00:03 redis-server *:6379
[root@mcw01 ~/redis]$ kill 24850  #杀掉redis服务
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ rm -rf /data/6379/*  #删除原有的数据


rdb模式的redis下,添加一个数据
[root@mcw01 ~/redis]$ redis-server 2rdbRedis.conf   #现在已经准备好rdb的环境了
[root@mcw01 ~/redis]$ ls /data/6379/
redis.log
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> set name mcw
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ ls /data/6379/  #数据保存到rdb文件中
mcwredis.rdb  redis.log
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> config set appendonly yes  #在线修改步骤1,开启aof
OK
127.0.0.1:6379> config set save ""   #在线修改步骤2:关闭rdb
OK
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ ls /data/6379/
appendonly.aof  mcwredis.rdb  redis.log
[root@mcw01 ~/redis]$ cat /data/6379/appendonly.aof   #然后就可以看到aof将rdb中的数据复制了一份过来
*2
$6
SELECT
$1
0
*3
$3
SET
$4
name
$3
mcw
[root@mcw01 ~/redis]$ vim 2rdbRedis.conf 
[root@mcw01 ~/redis]$ cat 2rdbRedis.conf   #永久修改为aof,需要修改配置文件,注释两行,添加后两行
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379                    
#dbfilename  mcwredis.rdb            
bind  127.0.0.1                       
#save 1000 10     
appendonly yes
appendfsync always
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ ls /data/6379/
appendonly.aof  mcwredis.rdb  redis.log
[root@mcw01 ~/redis]$ rm -rf /data/6379/mcwredis.rdb  #现在可以删除rdb文件了,因为数据都同步到aof上了
[root@mcw01 ~/redis]$ ls /data/6379/
appendonly.aof  redis.log
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ 


验证重启后数据是否不丢失。
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
root      24896      1  0 01:00 ?        00:00:00 redis-server 127.0.0.1:6379
[root@mcw01 ~/redis]$ kill 24896
[root@mcw01 ~/redis]$ ps -ef|grep -v grep |grep redis
[root@mcw01 ~/redis]$ redis-server 2rdbRedis.conf 
[root@mcw01 ~/redis]$ redis-cli 
127.0.0.1:6379> keys *  #重启后验证数据还在,说明已经是成功修改的。生产环境就不需要重启验证了。
1) "name"
127.0.0.1:6379> get name
"mcw"
127.0.0.1:6379> 
[root@mcw01 ~/redis]$ 

 



 

标签:aof,grep,rdb,redis,6379,mcw01,root
来源: https://www.cnblogs.com/machangwei-8/p/15970107.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有