1、本身是key-Value类型的数据库,数据本身可以持久化,支撑的数据类型包括:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(ZSet)
2、有两种持久化方式:RDB(定时持久化)、AOF(追加方式持久化)
RDB:调用fork(),创建一个子进程,把数据写到临时的RDB文件中,写完后将原先旧的RDB文件进行替换;
优势:RDB的优势在于Redis中只存在一个文件,由于是单文件,既适合远程传输,也适合灾备的数据恢复;且性能好,由于是另外fork一个子进程进行备份处理,不会影响原来的系统IO;
缺点:缺点在于如果在备份前机器宕机了,那这部分数据会被丢失;并且,Redis在进行fork进程时候,会使原来的服务 停顿,如果数据量过大,则停顿可能超过一秒;
AOF:使用追加日志的方式,当Redis收到修改的命令的时候,会把命令追加到AOF文件中:Redis采用了三种同步策略,每秒同步,每修改同步与不同步;
当Redis重启的时候,如果AOF执行到一半,可以使用Redis-Check-AOF进行数据恢复,保证一致性;
优点:数据持久化可靠性比RDB高,能够做到近实时的持久化数据,而且机器宕机后也能保证数据的一致性;
缺点:同样的数据量下,AOF的文件要比RDB的文件更大,并且实际运行效率RDB的效率更好,而且RDB在灾备恢复效率也比AOF要更快;
综上:
1、如果数据非敏感数据,且没有持久化需求,可不开启持久化;
2、如果能够接受几分钟的数据丢失,可开启RDB
3、如果需要当内存数据,则两者都开启;
且当两者都开启的时候,恢复数据时候,Redis优先选择AOF进行恢复,因为AOF保留的数据更全;