Redis深入理解(二)过期处理与RDB和AOF

原创
07/15 08:52
阅读数 20

Redis所有数据库都保存在redisServer.db数组中,数据库数量有redisServer.dbnum属性保存。客户端通过修改目标数据库指针,让他指向RedisServer.db数组不同元素来切换数据库。

数据库主要有dict和expires两个字典构成。一个是保存k-v,一个保存过期时间。

一、过期处理策略有两种

1、惰性删除:当有操作时,判断是否过期,如果过期则直接删除。缺点:浪费内存,我有冗余内存占用

2、定期删除:配置定时操作,可以定时分段扫描过期k-v。定时扫描有。开始标志,进行到哪一段。缺点:大量数据被清理,会出现cpu紧张问题

最优解决方案:惰性删除+定时删除。

二:Redis持久化有两种方式一种是保存为RDB二进制文件,另一种是增量保存AOF文件。

save和bgsave不包含已经过期的key.

RDB有两种操作:1、直接执行save命令,由于Redis是单线程,该命令会阻塞。2、另一种是bgsave命令,另起线程执行。当时执行bgsave时不能够执行save命令。

针对RDB文件内过期key处理:主节点加载RDB不会把过期的key加载,从服务节点会把已经过期的也加载到服务器,清理时机根据主从复制搞定。

三、AOF效率,写入到操作系统的页缓存内。服务器提供appendfsync选项。

always:每个事件循环都要将aof_buf写入页缓存,并sync写硬盘。如果宕机只会丢失一个事件命令数据。

everysec:每个事件循环都要将aof_buf写入页缓存,每间隔1秒,sync到硬盘。服务器宕机,会丢失1秒钟的命令数据。

no:每个事件循环都要将aof_buf写入页缓存,何时sync根据操作系统来。sync时间是最长的,宕机丢失数据也是最多的。但是写入速度是最快的。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部