确定存储文件的TTL - Couchbase

时间:2016-06-27 16:33:53

标签: couchbase ttl

我有一堆文件存储在couchbase存储桶中。我想找到每个文件的TTL。有办法吗?

编辑:

我创建了一个显示元数据的视图。我假设下面是到期的unix时间。

{
   "id": "beer-Milk-New",
   "rev": "9-145c05b4021400005771779102000000",
   "expiration": 1467053969,
   "flags": 33554432
}

1 个答案:

答案 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())。