1、5种数据类型
string
list
hash
set
zset:当zset中的元素较多或成员是比较长的字符串(STS)时,redis就会使用skiplist做为底层实现;skiplist的另一个作用就是用作集群节点中的内部数据结构
2、默认为16个数据库
3、两种持久化策略(rdb和aof)
两者的目的:将redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失
3.1.1 rdb(通过保存数据库中的键值对来记录数据库状态)
rdb生成:可以通过SAVE(服务器进程会阻塞,在这期间服务器进程不能处理任何命令请求)和BGSAVE(会派生出一个子进程,然后子进程负责创建rdb文件)生成rdb文件
rdb载入:载入期间,会一直处于阻塞状态,知道载入完成为止
3.1.2 redis允许用户通过设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE,配置文件如下:
save 900 1
save 300 10
save 60 10000
在redis.conf中进行设置,表示每隔900s更新1个或每隔300s更新10个或每隔60s更新10000个时执行一次BGSAVE
3.2.1 aof(通过保存redis服务器所执行的写命令来记录数据库状态)
aof文件的生成:
aof的持久化可以分为三步:append(追加)、文件写入、sync(同步)
append:当aof持久化功能处于打开时,服务器在执行晚一个写命令后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾
文件写入、sync(同步)
appendfsync | aof持久化的效率 | aof持久化的安全性 |
always | 最低 | 最高 |
everysec | 次之 | 次之 |
no | 最高 | 最低 |
aof文件的载入:红色文件代表步骤
3.2.2 aof rewrite(后台重写)很有意思,这里有一个机制可以学习一下
创建一个新的aof文件来替代现有的aof文件,新旧两个aof文件所保存的数据库状态相同,但新aof文件不回包含冗余命令
在整个aof后台重写的过程中,只有信号处理函数执行时会对服务器进程造成阻塞,在其他时候,aof后台重写都不会阻塞父进程,这将aof重写对服务器性能造成的影响降到了最低