首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用spring-data-couchbase为特定的Couchbase文档设置TTL?

如何使用spring-data-couchbase为特定的Couchbase文档设置TTL?
EN

Stack Overflow用户
提问于 2015-07-21 08:53:05
回答 4查看 3.4K关注 0票数 4

如何使用spring-data-couchbase为特定的couchbase文档设置TTL (生存时间)?我知道有一种方法可以使用文档表示法来设置过期时间,如下所示:@ Document (expiry = 10)

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

它将为通过实体类保存的所有文档设置TTL。

但是似乎有办法为特定文档设置过期(TTL)时间"Get和touch:获取指定文档并更新文档过期时间“。在http://docs.couchbase.com/developer/dev-guide-3.0/read-write.html中提到

我如何通过spring-data-couchbase实现上述功能,即使我可以使用Java SDK实现这些功能,也没问题。

任何帮助……

EN

回答 4

Stack Overflow用户

发布于 2015-08-01 00:58:02

使用Spring data couchbase,这是一种配置每个文档的ttl的简单方法。

代码语言:javascript
复制
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());
            }
        }
    }


}
票数 5
EN

Stack Overflow用户

发布于 2015-07-21 15:46:08

使用Spring-Data-Couchbase,您不能在特定实例上设置TTL。考虑到隐藏在CouchbaseTemplate save方法中的代码转换步骤,一次性插入(突变)和设置TTL将非常复杂。

但是,如果您想要做的只是更新已持久化文档的TTL (这就是getAndTouch所做的),有一种方法不涉及任何代码转换,因此可以很容易地应用:

CouchbaseTemplate访问

  • ,通过getCouchbaseClient()访问底层SDK客户端(__注意目前sdc是建立在上一代SDK 1.4.x__之上的,但很快就会有sdc-2.0的预览版;))
  • 使用SDK,对文档的ID执行touch操作,为其提供新的TTL
  • touch()方法返回一个OperationFuture (它是异步的),因此请确保阻塞它或仅在回调中收到通知时才考虑进行触摸。
票数 3
EN

Stack Overflow用户

发布于 2022-01-04 10:12:07

spring-data-couchbase:4.3.0开始,代码应该类似于yourRepository.getOperations().getCouchbaseClientFactory().getCollection(null).touch(id, ttl),或者也可以通过CouchbaseTemplatecouchbaseTemplate.getCollection(null).touch(id, ttl)的形式完成

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31528665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档