持久化RDB/AOF-Redis(三)

2023-09-05 14:26:29 浏览数 (1)

上篇文章说了数据持久化,这里再学习一个命令。

数据结构-Redis(二)

一、查询所有key

scan 0 match zhuge* count 1

他会返回游标,下次查询用返回的游标

直到游标返回0,则代表查询到所有的key

二、RDB

RDB快照怎么配置呢?

默认是dump.rdb文件。

分别代表意思是:

60s之内1万次修改,则会直接写到dump.rdb。

300s之内修改10次,则会把内存数据全部写到dump.rdb。

900s之内修改1次,则会内存数据全部写到dump.rdb。

这三个只要满足一个就会持久化发生。

我们也可以手动sava执行持久化到磁盘。(会阻塞主线先i/o操作)

Redis现在采用的是bgsave是异步持久化。(background save)

子线程是由主线程fork产生的,完全共享主线程的数据,主线程read则不传递给子线程,当write时候,就会和子线程共享。(写时复制)

rdp缺陷显而易见,如果上面三个条件没触发,系统宕机,则会丢失数据。于是aof则出现了。

三、AOF

​Append only file

有三个策略:

Appendfsync everysec:写秒钟执行持久化一次,足够快。

Appendfsync always:每次有新命令立马持久化。(所以影响性能)

Appendsync no:不持久化。

可以通过appendonly yes来开启。

AOF重写(优化机制)

比如很多条incr readcount原子加,这时候一直执行同一条命令,这时候就可以优化。

Auto-aof-rewrite-min-size 64mb:意思是当aof文件有64mb的时候,就会清理上面那些垃圾命令。

Auto-aof-rewrite-percentage 100:当文件上次重写的增长了百分之百,再次触发,意思就是128mb。

手动触发重写命令:bgrewriteaof

Redis为了保证数据安全性,优先用aof文件恢复,因为aof文件数据更多。

四、混合持久化

Aof-use-rdb-preamble no

默认是关闭的。

4.0后支持,开启混合持久化的前提,必须是开启aof之上做的。

1、普通写入是数据存入aof文件。

2、当在aof重写的时候,不会再把优化写成一条一条命令,而是写成二进制的rdb格式,存入aof文件。

(没开启混合的时候,aof存的是数据,打开之后,存的是二进制rdb格式)

后面要恢复数据的时候,二进制直接在电脑显示,效率更高,存储的格式也更紧凑。

所以恢复数据速率更高。

当使用混合持久化方式的时候,save的rdb都可以注释掉。

0 人点赞