redis的RDB和AOF
缓存的特点: 可以丢失,极速。
数据库特点: 绝对不可以丢失,速度 + 持久性,掉电易失。
存储层:都有快照副本、日志
redis的持久化:
1、RDB (redis data base) 默认开启
在指定时间间隔内,执行指定次数的写操作,会将内存数据写到磁盘里,在指定路径下生成一个dump.rdb文件,redis每次重启都会加载dump.db。
优点:1、适合大规模的数据恢复;
2、适合数据完整性和一致性不高。
缺点:1、因为数据完整性和一致性不高,最后一次备份容易宕机。
2、备份时会占用内存。(因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件)。夜深人静时备份比较合适。
2、AOF (append only file) 默认关闭
为了弥补RDB的不足,它采用日志形式来记录每个写操作,并追加到文件中。redis重启将会按照"从前到后"的命令执行日志文件中的指令。
优点:数据的完整性一致性更高。
缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也越来越慢。
总结:
- Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
- RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
- Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
- AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
- Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
- 若只打算用Redis 做缓存,可以关闭持久化。
- 若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。
一般涉及到IO都容易发生数据丢失