MongoDB中設置expire過期自動刪除


關鍵詞: expireAfterSeconds、TTL

TTL Time to Live

 

類似Redis中的expire機制,MongoDB也可以設置過期自動刪除的表。

MongoDB的過期設置依賴索引(TTL-index),設置過期字段使用的索引后,插入數據時在該字段指定日期時間,

經過在創建索引時指定的秒數后,該記錄會被MongoDB認為已經過期,然后刪除。

 

JS版

db.test_timer.createIndex({"timer":1}, {expireAfterSeconds: 10})
db.test_timer.insert({"timer":new Date(), "a":'abc'})  // 指定當前時間
db.test_timer.insert({"timer": new Date("2017/3/25 13:11:00"), "c": "CC"})  // 指定任意時間

 

Python版

創建索引和指定過期時間的方式類似,要注意的是過期時間的字段必須使用UTC時間,否則無法正常刪除記錄
因此指定過期時間刪除雖然也可以起作用,但是不能確定刪除時間非常精確。

from pymongo import MongoClient
cli = MongoClient()
db = cli['test']
tbl = db['test_timer2']
tbl.create_index([("timer2", 1)], expireAfterSeconds=10)
from datetime import datetime
tbl.insert({"timer2": datetime.utcnow(), "user": "Hehehehe!"})

from time import strptime, time, mktime
t1 = strptime("2017/3/25 13:36:02", "%Y/%m/%d %H:%M:%S")
t2 = datetime.utcfromtimestamp(mktime(t1))
tbl.insert({"timer2": t2, "CC": 12345})
tbl.insert({"timer2": 123, "TT": 1})  # TTL-index字段也可以是其他值,這是就不能被自動刪除
cli.close()

 

經過測試,實際刪除數據的時間與索引加上數據指定的時間點之間存在偏移,可能是MongoDB刪除數據機制的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM