MongoDB 的 TTL 索引功能,真的是个挺实用的宝藏功能,适合你那些有时效性的数据。比如日志、临时数据、会话这些,存着也没啥意义,还拖慢性能,直接用 TTL 让它们自动消失,干净又省心。

TTL 索引创建其实蛮。用db.collection.createIndex()就能搞定,关键是加个expireAfterSeconds参数,告诉 MongoDB 数据啥时候“到期”。比如:

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

这意思就是让lastModifiedDate超过一小时的记录自己删除,省得你手动清理了。嗯,挺省事的吧?

后台其实是 MongoDB 的mongod进程在 60 秒一次地检查,你觉得“为啥我都过期了还在?”其实是有点延迟,但基本不影响大局。

也有坑。比如不能搞复合索引、字段得是日期型的,不然 TTL 根本不认。还有一点,主从环境下只有主库会删,从库只是复制操作。

最适合 TTL 索引的场景?嗯,比如你做个登录系统,临时验证码、session 这些,用 TTL 再合适不过了。不然你手动定时删也太麻烦。

要注意的点也不多,字段别用错类型,时间设置合理点就行。如果你现在还在自己写定时脚本清数据,那真得试试这个方法,方便还不出错。