一.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修改记录

  

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

  

最新文章

  1. 【转】ASP.NET MVC学习笔记-Controller的ActionResult
  2. FolderSync PC 电脑 FTP 同步方法
  3. jenkins 的 ProcessTreeKiller----无法启动子进程的解决办法
  4. RDMA的ibv_post_send() 函数
  5. Mac OS X Terminal 101:终端使用初级教程
  6. Linux链接库三(C跟C++之间动态库的相互调用)
  7. SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-006Spring-Data的运行规则(@EnableJpaRepositories、<jpa:repositories>)
  8. Java再学习——sleep(), wait(), notify(), notifyAll()
  9. SQL基础知识
  10. 2015-J. PUMA
  11. (原+转)error C2872: “ACCESS_MASK”: 不明确的符号 C:\Program Files (x86)\Windows Kits\8.1\Include\um\ktmw32.h 125
  12. jquery 使用attr() 函数对复选框无效的原因
  13. 获取 Windows 任务栏 Rect
  14. 【CSS】 CSS基础知识 属性和选择
  15. 史上最全的springboot导出pdf文件
  16. IDEA设置(含永久破解IDEA)
  17. 【RabbitMQ】5、RabbitMQ任务分发机制
  18. B. Math
  19. 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)
  20. PHP规范PSR0和PSR4的理解

热门文章

  1. 关于更新vs2017后发布的问题 命令“bower install”已退出,代码为 9009
  2. Web测试实践--Rec 3
  3. ngix 创建新的网站
  4. python列表技巧
  5. oracle问题:新建了一个PDM文件,建表后生成的sql语句中含有clustered
  6. MongoDBAppender
  7. SuSE Linux上修改主机名
  8. 编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间
  9. HBASE与hive对比使用以及HBASE常用shell操作。与sqoop的集成
  10. 【Web学习笔记】浅析CGI概念及用法