Вы не указали, какую версию Couchbase сервера, но этот ответ предполагает, что вы используете 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()
).
Обратите внимание, что 'exp_datetime' здесь должно быть явно добавлено и сохранено для каждого документа. Couchbase автоматически не подвергает действительный TTL обычным способом. –