Redis持久化

RDB

RDB持久化方式采用的是快照原理,在某一时刻将数据保存到硬盘上。
使用save指令,即可保存数据快照。
相关配置
指定配置文件启动,在配置文件中,设置

# 设置快照保存的文件,通常以dump-端口号.rdb方式命名
dbfilename dump-6379.rdb
# 设置快照文件保存的位置
dir /usr/local/redis/data
# 设置保存快照时是否压缩数据,默认为yes,如果为no,可以节省CPU但会消耗更多的内存空间
rdbcompression yes
# 设置rdb文件是否校验,在读文件和写文件是均进行。如果不设置可以节省10%时间,但可能会出错
rdbchecksum yse

缺点
save指令是在当前线程中执行的,就是和数据增删改查指令在同一线程中排队执行。当数据非常大的时候,执行save指令时消耗的时间很长,多有多个用户在操作时,在save指令后面的用户必须等save执行完之后才能执行。用户体验非常差。
替代
使用bgsave指令,和save指令工作原理一样,只不过bgsave指令是在Linux的fork函数生成的子进程中执行,不会影响其他用户操作。通常使用bgsave指令,save指令差不多废弃了。
在这里插入图片描述
上面说了那么多,终究是手动进行持久化,然鹅这是不现实的。我们需要Redis自动执行持久化。
做法:
在redis.conf配置文件中增加

save second changes
# 上面指令表示在second时间内,数据发生了changes次改变,就执行持久化操作。注意:虽然写的save,但是Redis实际使用的是bgsave指令执行持久化

在设置保存的频率是,通常设置成多级递进关系,即设置多条save指令。保存的频率不可过高也不可过低。
在这里插入图片描述
这个是Redis配置文件里的默认配置。

RDB优点

  1. RDB的存储的二进制数据,存储效率非常高
  2. RDB存储的是某个时间点的快照,非常适合用作数据备份
  3. RDB速度比AOF要快

RDB缺点

  1. 存储的是某个时间点的数据,可能会造成数据丢失
  2. 版本不兼容,不同版本Redis存储的RDB文件无法互相使用
  3. bgsave每次执行需要执行fork函数创建子进程,会消耗一些内存

AOF

RDB持久化虽然存储效率高,但是采用快照方式保存数据,数据量大,那么相应的I/O就会慢。
AOF(append only file)采用的记录操作的方式持久化数据,记录更改数据的操作,在重启的时候将操作再走一遍。
相关配置

# 在redis.conf配置文件中添加一下配置项
appendonly yes # 打开AOF
appendfsync always|everysec|no
# always是每次更改就存储一次,这样会造成体验不好,效率不高,时间浪费在I/O上。
# everysec每一秒存储一次,通常使用这个
# no 是将存储权交给系统,由操作系统控制什么时候进行I/O
appendfilename appendonly-6379.aof # 命名方式同上
dir path # 前面配置过了

问题

AOF记录操作,然鹅有时候操作会覆盖掉。比如
在这里插入图片描述
这样最终保存的name值是ww,而文件中记录了两次。所有Redis就给AOF增加了重写机制。这样重写后的aof文件就只保留最后一个set操作。

bgrewriteaof 指令指定在后台进行aof文件的重写。和bgsave指令原理一样,都是fork函数生成一个子进程进行重写操作。

注:文章内容均是观看视频后自己写的笔记,部分图片是视频截图。原视频链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值