Как установить TTL для определенного документа Couchbase с помощью spring-data-couchbase?

Как установить TTL (время жизни) для конкретного документа couchbase с помощью spring-data-couchbase? Я знаю, что есть способ установить время истечения срока действия с использованием обозначения документа следующим образом @Document (expiry = 10)

http://docs.spring.io/spring-data/couchbase/docs/1.1.1.RELEASE/reference/html/couchbase.entity.html.

Он установит TTL для всех документов, сохраненных через класс Entity.

Но, похоже, есть способ установить время истечения (TTL) для определенного документа «Получить и коснуться: получить указанный документ и обновить срок действия документа». упоминается в http://docs.couchbase.com/developer/dev-guide-3.0/read-write.html

Как я могу достичь вышеуказанной функциональности с помощью spring-data-couchbase. Даже если я смогу достичь функциональности с помощью Java SDK, все будет в порядке.

Любая помощь.....


person Mizanur Rahman    schedule 21.07.2015    source источник


Ответы (2)


Используя Spring data couchbase, это простой способ настроить ttl для каждого документа.

public class CouchbaseConfig extends AbstractCouchbaseConfiguration {

    @Override
    protected List<String> bootstrapHosts() {
        return Arrays.asList("localhost");
    }

    @Override
    protected String getBucketName() {
        return "default";
    }

    @Override
    protected String getBucketPassword() {
        return "password1";
    }

    @Bean
    public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception {
        MappingCouchbaseConverter converter = new ExpiringDocumentCouchbaseConverter(couchbaseMappingContext());
        converter.setCustomConversions(customConversions());
        return converter;
    }


    class ExpiringDocumentCouchbaseConverter extends MappingCouchbaseConverter {

        /**
         * Create a new {@link MappingCouchbaseConverter}.
         *
         * @param mappingContext the mapping context to use.
         */
        public ExpiringDocumentCouchbaseConverter(MappingContext<? extends CouchbasePersistentEntity<?>, CouchbasePersistentProperty> mappingContext) {
            super(mappingContext);
        }

        // Setting custom TTL on documents.
        @Override
        public void write(final Object source, final CouchbaseDocument target) {
            super.write(source, target);
            if (source instanceof ClassContainingTTL) {
                target.setExpiration(((ClassContainingTTL) source).getTimeToLive());
            }
        }
    }


}
person user897493    schedule 31.07.2015

Используя Spring-Data-Couchbase, вы не можете установить TTL для конкретного экземпляра. Вставка (изменение) и установка TTL за один раз было бы довольно сложно, учитывая шаги перекодирования, которые скрыты в методе CouchbaseTemplate save.

Однако, если вы хотите просто обновить TTL уже сохраненного документа (что и делает getAndTouch), есть способ, который не требует перекодирования и поэтому может быть легко применен:

  • Из CouchbaseTemplate получите доступ к базовому клиенту SDK через getCouchbaseClient() (примечание, поскольку теперь sdc построен на основе SDK предыдущего поколения, 1.4.x, но будет предварительная версия sdc -2.0 скоро;))
  • Используя SDK, выполните touch операцию с идентификатором документа, присвоив ему новый TTL.
  • Метод touch() возвращает OperationFuture (он асинхронный), поэтому убедитесь, что вы заблокировали его или считайте касание выполненным, только если об этом уведомлено в обратном вызове.
person Simon Baslé    schedule 21.07.2015