Redis 是什么?
Redis是一个开源的,内存中的的数据结构存储系统。用作数据库、混村和信息中间件。支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets),有序集合(sortedsets)。Redis 内置复制 (replication)、LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence)、并通过Redis哨兵(Sentinel) 和自动分区 (Cluster) 提供高可用性(highavailability)。
关系型数据库和非关系型数据库
采用关系模型来组织数据的数据库,关系模型就是二维表格模型。一张二维表的表名就是关系,二维表中的一行就是一条记录,二维表中的一列就是一个字段。
关系型数据库
优点:
1、易于维护:都i是使用表结构,格式一致
2、使用方便:SQL语言通用,可用于复杂查询
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
缺点:
1、读写性能较差,尤其是海量数据的高效率读写
2、硬盘I/O是并发的瓶颈
3、横向扩展困难,无法简单的通过添加硬件和服务节点来扩展性能和负载能力,当需要对数据库进行升级和扩展时,需要停机维护和数据迁移
4、多表的关联查询以及复杂的数据分析类型的复杂sql查询,性能欠佳,因为要保证ACID,必须按照三范式设计。
非关系型数据库
非关系型数据库 分布式 一般不保证遵循ACID原则数据存储系统,键值对存储,结构不固定
优点:
根据需要添加字段,不需要多表联查,仅需要id取出对应的value
适用于SNS(社会化网络服务软件,如微博 facebook)
严格上讲不是一种数据库,而是一种数据化存储方法的集合
缺点:
只适合存储一些较为简单的数据
不适合复杂查询的数据
不适合持久存储海量数据
Redus持久化方案
Redis 的持久化机制有两种,第一种式RDB快照,第二种式AOF日志,快照式一次全量备份,AOF日志式连续的增量备份。
快照是内存数据的二进制序列化形式,在存储上非常紧凑,而AOF日志的内存数据修改的是指令记录文本。
RDB
什么是RDB?
对redis中的数据化执行周期性进行持久化,通过配置文件中设置检查间隔时间于备份触发条件来对数据进行周期性的持久化。
优点:
1、 适合做大规模的数据恢复
2、如果业务对数据完整性和一致性要求不高,RDB是很好的选择
缺点:
1、数据的完整性和一致性不高,因为RDB可能在最后一次备份的时候宕机
2、备份时占用内存,因为Redis在备份时会独立创建一个子进程,将数据写入到一个临时文件。
AOF
什么时AOF
AOF机制对每条写入命令作为日志记录,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集。
优点:
1、AOF可以更好的保护数据不丢失,一般AOF会以每隔1秒,通过后台的一个线程去执行一次fsync操作,如果redis挂掉了,最多丢失1秒的数据。
2、AOF以append-only的模式写入,所以没有任何的磁盘殉职的开销,写入性能非常高
3、AOF日志文件的命令通过非常可读的方式进行记录,这个非常适合做灾难性的误删除紧急恢复,只要没有执行rewrite,就可以将日志文件中的flushall删除 进行恢复。
缺点:
1、对于同一份数据备份文件 AOF比RDB大
2、AOF开启后支持写的QPS会比RDB支持的写的QPS低,因为AOF一般会配置成每秒fsync操作
3.数据恢复比较慢,不适合做冷备
AOF和RDB如何选择
1、如果数据不敏感,且可以从其他地方地方重新生成,可以关闭持久化
2、如果数据比较重要,且能够承受几分钟的数据丢失,可以使用RDB
3、如果是用作内存数据,要使用Redis的持久化,建议RDB和AOF都开启
4、如果只用AOF,优先使用everysec的配置选择,因为它在可靠性和性能之间去了一个平衡。