redis-持久化

来源:互联网 发布:cnc编程要学多久 编辑:程序博客网 时间:2024/06/01 13:06

一.mysql与redis的对比

1.关系型数据库:MySQL-持久化

  • 任何增删改语句,都是在硬盘上做的操作
  • 断电以后,硬盘上的数据还是存在

2.持久化

  • 把数据保存在硬盘上

3.内存(兔子)

  • 高效、断电数据就会消失

4.硬盘(乌龟)

  • 读写速度慢于内存的,断电数据依旧存在

5.非关系型数据库redis

  • 默认情况下,所有的增删改,数据都是在内存中进行操作
  • 断电以后,内存中的数据不存在的[如果服务器强制断电,就会出现数据丢失的情况
  • 断电以后,redis的部分数据会丢失,丢失的数据是保存在内存中的数据
  • redis存在持久化操作的

二.持久化策略

对于redis有两种持久化策略,这里我们先介绍下RDB

1.RDB

  • 是redis的默认持久化机制
  • RDB相当于照快照。保存的是一种状态
  • 它可以把20G的数据压缩成几kb的数据保存
  • 默认保存在如下

这里写图片描述

2.RDB优点

  • 照快照保存数据速度极快,还原数据速度极快
  • 适用于灾难备份(比如服务器房失火,地震的时候,为了保证数据不丢失只需要拷贝dump.rdb这个文件下来就可以了)

3.RDB缺点

小内存机器不适合使用的,RDB机制符合要求就会照快照(随时随地启动,它是首先复制原数据,之后才继续计算转换成rdb最后才变成小空间),会占用一部分系统资源(突然的),很可能内存不足直接宕机(宕机后,服务器会关闭,非正常关闭)

比如你的服务器内存是4G,你的数据是3G,你照快照先是复制原数据3G,加起来就6G了,超出了4G,这样会造成宕机的

  • 所以RDB只适用于内存比较充裕的计算机

4.RDB何时进行照快照

  • 当服务器正常关闭时,会照一次快照 ./bin/redis-cli shutdown 不可能一直关闭服务器吧,太依赖了
  • Key满足一定条件,也会照一次快照

5.RDB的设置

  • 在redis.conf下,用vim命令查看

使用”:/”来查看

这里写图片描述

这里写图片描述

* save 900 1 #每900秒(15分钟)至少有1个key发生变化,则dump内存快照* save 300 10 #每300秒(5分钟)至少有10个key发生变化,则dump内存快照* save 60 10000 #每60秒(1分钟)至少有10000个key发生变化,则dump内存快照

以上三个条件满足一个就照快照

6.key发生变化(key数据添加,修改,删除)的例子

  • 例如1
    • 12:00-12:15,有1个key发生变化,在12:15就照一次快照保存
    • 12:00-12:15,没有任何key发生变化,在12:15不会照快照
  • 例如2
    • 12:00-12:05 有11个key发生变化, 在12:05就照一次快照保存
    • 12:00-12:05 有9个key发生变化, 在12:05不会照快照,但到12:15会照快照
  • 例如3
    • 12:00-12:01,有15000个key发生变化,在12:01会照一次快照
    • 12:00-12:01,有1000个key发生变化,在12:01不会照快照,但是到12:05会照快照

虽然可以改时间,但是最好别改;因为这是开发者计算出来的效率高,安全,比较节约内存的方式

7.AOF

原创粉丝点击