1. RDB(Redis DataBase)Redis是一种内存型非关系型数据库,如果断电或者宕机等故障出现,redis存在内存中的数据就会丢失,相应的Redis给出了两种持久化方案,还有一种是RDB跟AOF的结合;
RDB是将某一时刻的数据集快照从内存写入磁盘当中,实际 *** 作过程是fork一个子进程将数据集写入一个临时文件,写入成功之后再替换掉之前的旧文件,以二进制压缩存储;
优点:
- 整个Redis只包含一个dump.rdb文件,方便持久化;
- 容灾性好,方便备份;
- 高性能,通过fork一个单独的子进程来进行持久化,而主进程则不会进行任何的IO *** 作;
- 数据集很大的时候,启动效率要优于AOF;
缺点:
- 数据安全性低,因为RDB是间隔一段时间进行持久化的;
- 如果数据量比较大可能会导致整个redis停止服务几百毫秒甚至一秒钟;
AOF是将Redis的 *** 作日志以追加的方式写入文件;
优点:
- 数据安全,提供了三种同步策略:
1.每秒同步:宕机等情况会丢失1秒内的数据;
2.每修改同步:不会丢失数据;
3.不同步:由 *** 作系统决定,丢失的数据也是不确定的; - 通过append模式写文件,即使宕机了也不会丢失文件及数据,可以通过redis-check-aof 工具解决数据一致性的问题;
- AOF的rewrite模式定期对AOF文件重写达到压缩(相同的命令合并)的目的;
缺点:
- AOF的文件比RDB的文件大;
- 数据集大的时候效率低于RDB;
RDB/AOF小结:
3.Redis过期键的删除策略AOF的文件比RDB要大,并且比RDB安全,但是性能却低于RDB,AOF的更新频率比RDB高,如果在redis中同时配置了RDB跟AOF,服务会优先采用AOF进行持久化;
Redis中默认的过期策略:惰性删除跟定期删除;
- 惰性删除: *** 作某个数据的时候才回去判断数据是否过期,过期则删除,以空间换时间;
- 定期删除:每隔一段时间扫描redis server中expires字典,过期则删除;
- 定时删除:使用定时器设置key的过期时间,到点从dict中删除,以时间换空间;
Redis中有两个Dict对象:
dict:存放的是实际的数据;
expires:存放的是key和过期时间;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)