上篇文章说了数据持久化,这里再学习一个命令。
数据结构-Redis(二)https://blog.csdn.net/ke1ying/article/details/131118016
一、查询所有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都可以注释掉。