數(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ì)失效被刪除掉。