Expiration Management#

Expiration Policy#

  • 懒惰检测(Lazy check): 当client通过读命令获取内容和部分写命令修改内容时,进行对key的检测,如果过期了,直接回收内容并随后返回不存在。

  • 主动检测(Active check): 以一定的周期(cycle)检测整个DB哪些key过期了。 如果config指定LogMethodrequest,那么检测到过期key的话,会向request log写入del key的请求内容以指示recovery删除

对于主动检测的周期,默认是60 seconds,可以通过config调整,-1表示不进行主动检测。

Implementation#

具体来说,显然存储<key -> expiration time>需要另开一个字典,因为不是所有key都有过期时间。

class MmkvDb {
  ...
  AvlDictionary<String, MmkvData> dict_;
  AvlDictionary<String, uint64_t> exp_dict_;
};

还有一些相关方法,具体参考mmkd/db/kvdb.h