1.redis存储结构的方式
rdb和aof
aof默认关闭,若aof开启,则优先aof
rdb:
1.用于保存和还原redis服务器所有数据库中的所有键值对数据来记录数据库状态不同.
2. 被压缩的二进制文件,由多个部分保存,如redis,不是redis\0,临时文件替换上一次持久化文件(全量)
3.检查所载入文件:rdb文件,rdb文件的开头部分长度是REDIS五个字符.
4.保存用到save选项中任意一个被满足,服务就会自动执行bgsave命令.
5.rdb文件是一个被压缩的二进制
4.rdb文件的生成 redis的命令有两种 :
1.save : 阻塞redis服务器进程,直到rdb文件创建完毕为止,在此期间,不能处理任何请求的数据
2.bgsave:派生子线程,主线程继续处理命令请求.
aof:
1.是通过保存所执行的写命令(SET,SADD,RPUSH)来记录数据库的状态下来,(select命令是自动保存下来的)
2. Aof持久化功能的实现可以分为命令追加(append) ,文件写入,文件同步(sync), 三个步骤. 默认关闭(增量)
3.aof持久化的效率和安全性
appendfsync:
alway ,服务器在每个事件的循环都要将aof_buf缓冲区中的内容写入到AOf中,并且同 步aof文件,效率最慢,最安全,即使停机也只会失去一个事件循环中所产生的数据.
everysync: 服务器在每个事件的循环都要将aof_buf缓冲区中的内容写入到AOf文件,并且1秒钟同步一次,如果停机只会失去1秒钟的命令数据.
no: 服务器在每个事件的循环都要将aof_buf缓冲区中的内容写入到AOf文件,但是何时同步数据,由操作系统进行控制
4.aof文件的载入和还原:
创建一个不带网络的伪客户端,aof命令只能通过客户端上下文中执行,将所有写命令的全部执行,那么数据库就会被还原出来了.
5.aof重写:aof文件因为大量写命令,会造成aof文件体积越来越大,可能会对整个宿主机造成影响,文件越大,还原的数据库的时间就越长.为了解决体积膨胀的问题,提供了aof重写,用新的aof文件来替换旧的aof文件.新的aof文件是通过读取数据库数当前的状态,所以不会有任何冗余命令,同时体积也会小很多.
如果redis_aof_rewrite_items_percmd常量是64,如果集合超过这个数据,那么就会用多个sadd命令记录这个集合,每条命令的元素的数量也会是64个,rpush同理