我有一堆文件存储在couchbase存储桶中。我想找到每个文件的TTL。有办法吗?
编辑:
我创建了一个显示元数据的视图。我假设下面是到期的unix时间。
{
"id": "beer-Milk-New",
"rev": "9-145c05b4021400005771779102000000",
"expiration": 1467053969,
"flags": 33554432
}
答案 0 :(得分:0)
您没有指定Couchbase Server的哪个版本,但此答案假设您使用的是4.x并且可以运行N1QL查询。
我认为你走在正确的轨道上。查看关于在到期之前检测到过期的博客文章:http://blog.couchbase.com/2016/april/detecting-expirations-of-documents-with-couchbase-server-and-n1ql
基本上你需要两个步骤。首先,在到期时间上创建一个索引。
CREATE INDEX iExpiration ON default(exp_datetime) USING GSI;
这不是严格必要,我不认为,但它会提高性能。
其次,只需运行类似下面的N1QL查询(将列出将在接下来的30秒内过期的文档)。
SELECT META(default).id, *
FROM default
WHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,"second")),"second") < 30
AND STR_TO_UTC(exp_datetime) IS NOT MISSING;
所以,如果你想找到每个文件的TTL,你可能需要从当前时间减去exp_datetime
(我相信CLOCK_MILLIS()
)。