一、非关系型数据库NoSql
如下四种类型都是非关系型数据库
1.键值存储数据库(Key-Value)
如redis,就是键值存储数据库
2.列存储数据库
如clickhouse是列存储
3.文档型数据库
4.图形数据库(Graph)
二、redis的特点
redis是一个高性能的非关系型数据库,其中的所有数据形式都是以键值对的方式来存储的,redis支持持久化,并且redis是单线程和单进程的
三、redis中的数据类型
String,list,set,zset,hash五大类型
具体类型看上一个博客
四、Redis持久化机制
1.RDB持久化,快照模式(默认)
这一方式可以将某一时刻的所有数据写入硬盘中,保存的文件形式是以rdb结尾的,所以也叫RDB方式,也称为快照持久化
客户端方式之一:bgsave
在命令行中输入bgsave,当接收到该命令的时候,reids会调用一个fork来创建一个子进程,然后子进程负责将数据写入磁盘中,而父进程继续处理命令
客户端方式之save命令
当redis接收到save命令时,在redis服务器快照创建完毕之前将不再响应其他命令,会导致其丢失这段时间的数据
配置生成快照名称和位置
1.- dbfilename dump.rdb
2.修改生成位置
- dir ./
注:这种方式不太好,一般不用,会导致数据丢失
2.AOF持久化,只追加日志文件
特点:
这种方式会将所有客户端执行的写命令全部记录到日志文件中,AOF持久化会将被执行的命令写到AOF文件的末尾,因此redis只要从头到尾执行一遍AOF文件就能恢复AOF文件记录的数据集
开启AOF持久化
客户端本来是没有开启AOF持久化的,需要在配置中开启
1.开启的AOF持久化
-a.修改appendnoly yes 开启持久化
-b.修改 appendfilename “appendonly.aof” 指定生成文件名称
日志文件追加的频率
在redis的配置文件中,可以修改AOF追加文件的频率
-appendfsync everysec | always | no三种写法
其中everysec是默认的,一般我们也只用这个
注意事项
由于会将所有的命令写入AOF文件中,所以会导致文件随着执行的次数越来越大,例如我们调用incr test一百次,aof文件就会存储一百次这个命令,
而其中99条都是不需要的,只需要保存一条set test 100就够了,因此为了压缩aof的持久化文件redis提供了重写AOF文件的机制
AOF重写
用来在一定程度上减小AOF文件的体积,加快启动速度,还能保证数据不丢失
触发重写的方式
1.使用客户端方式触发重写
-执行bgrewriteaof的命令,不会阻塞redis服务
2.服务器配置方式自动触发
- 配置redis.conf中的auto-aof-rewrite-percentage选项 参加下图↓↓↓
- 如果设置auto-aof-rewrite-percentage值为100和auto-aof-rewrite-min-size 64mb,并且启用的AOF持久化时,那么当AOF文件体积大于64M,并且AOF文件的体积比上一次重写之后体积大了至少一倍(100%)时,会自动触发,如果重写过于频繁,用户可以考虑将auto-aof-rewrite-percentage设置为更大
重写机制的不同
7.0版本之前:
会有一个子进程和父进程,子进程开始在临时文件中写入新的AOF,父级将所有更新的积累在内存缓冲区中,同时它会将新的修改写入到旧的仅追加文件
7.0版本之后:
会有一个子进程和父进程,子级开始在临时文件中写入新的基本AOF,父级打开一个新的增量AOF文件以继续写入更新,如果重写失败,则旧的 base 和 increment 文件(如果有)以及这个新打开的 increment 文件表示完整的更新数据集