數(shù)據(jù)生命周期

所謂的 “數(shù)據(jù)生命周期” 是指:為數(shù)據(jù)設(shè)定一定的生存期限,過(guò)了這個(gè)時(shí)間后, 此數(shù)據(jù)就被刪除掉(失效)。

在進(jìn)行web開(kāi)發(fā)的時(shí)候,有很多需求場(chǎng)景是要求數(shù)據(jù)是具有一定的生命周期,比如:

  • 具有一定時(shí)效的用戶登錄會(huì)話
  • 邀請(qǐng)碼系統(tǒng)的時(shí)效控制
  • 具有時(shí)效的二維碼/短信/郵件驗(yàn)證系統(tǒng)
  • 接口調(diào)用認(rèn)證的token有效期
  • 第三方授權(quán)的期限控制
  • 分享內(nèi)容的時(shí)效控制
  • 記錄一段時(shí)間的日志

本文將以如下兩種數(shù)據(jù)庫(kù)特性為例子來(lái)對(duì)此功能的實(shí)現(xiàn)進(jìn)行介紹:

  • mongodb
  • redis

3   mongodb

3.1   實(shí)現(xiàn)方法

在mongodb中有個(gè) TTL(Time To Live 生存時(shí)間)索引 功能:

TTL索引是一種特殊索引,通過(guò)這種索引 MongoDB 會(huì)過(guò)一段時(shí)間后自動(dòng)移除集合中的文檔。 這對(duì)于某些類型的信息來(lái)說(shuō)是一個(gè)很理想的特性,例如: 機(jī)器生成的事件數(shù)據(jù),日志,會(huì)話信息等,這些數(shù)據(jù)都只需要在數(shù)據(jù)庫(kù)中保存有限時(shí)間。

  • 如果你可以設(shè)定這個(gè)生命周期是多久他只要過(guò)了這段時(shí)間之后,它就會(huì)自動(dòng)刪除掉
  • 刪除的周期就是一分鐘左右(和mongodb服務(wù)的負(fù)載有關(guān)),mongodb后臺(tái)會(huì)進(jìn)行周期性地檢查這些索引字段

在 mongodb 中的實(shí)現(xiàn)方式:

db.ttl_log_session.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

主要解釋如下:

  • 對(duì) ttl_log_session 合集建立索引
  • 索引字段為 lastModifiedDate
  • 索引順序是 升序
  • 有效生存周期為 3600 秒

達(dá)到的效果:以 lastModifiedDate 時(shí)刻開(kāi)始,經(jīng)過(guò) 3600 秒之后,此文檔會(huì)失效被刪除掉。

3.2   過(guò)期時(shí)間精度

網(wǎng)友評(píng)論