2017-07-27 18 views
0

我有存儲JsonLongDocument V.如何在不改變使用java客戶端的couchbase現有失效時間的情況下獲得密鑰?

每當看見一個事件E在時間T couchbase密鑰K,I遞增1在V使用以下Java客戶端T的更新的到期+ N(秒)功能:

bucket.counter(K, 1, 1, n) 

我也偶爾有使用密鑰K通過調用下面的Java客戶端功能來獲取值V:

bucket.get(K, classOf[JsonLongDocument]) 

但每當我打電話簡單的「得到」的couchbase是改變文件的到期日期t並將其設置爲0,這意味着永久存在。

如何在不改變期限的情況下對我的價值進行「獲取」?

回答

0

通過密鑰獲取文檔不會更改文檔的到期日期。

您必須使用bucket.touch(K, n)更新計數器後更新到期日。僅當計數器文檔不存在時才使用到期日bucket.counter(K, 1, 1, n)

JsonLongDocument返回的失效期限是傳遞給該方法的到期值或零。它並不反映存儲在Couchbase中的實際過期時間戳。我不確定爲什麼SDK的行爲如此,但it is expected behavior

要查看真實的到期時間戳記,您可以使用here所述的N1QL,或者您可以檢查計數器的數據文件。

步驟從數據文件中獲取文檔的屆滿:

  1. 確定在哪個vbucket和服務器的文檔駐留,vbucket 8和本地主機在下面的例子(需要libcouchbase,所述CouchbaseÇSDK)

    > cbc-hash test-counter-1 
    test-counter-1: [vBucket=8, Index=0] 
        Server: localhost:11210, CouchAPI: http://localhost:8092/default 
    Replica #0: Index=-1, Host=N/A 
    
  2. 提取從vbucket數據文件中的計數器文檔信息,8.couch.1在這個例子中

    > couch_dbdump 8.couch.1 | grep -B 2 -A 6 test-counter-1 
    Dumping "8.couch.1": 
    Doc seq: 63 
        id: test-counter-1 
        rev: 63 
        content_meta: 128 
        size (on disk): 11 
        cas: 1501205424364060672, expiry: 1501205459, flags: 0, datatype: 1 
        size: 1 
        data: (snappy) 2 
    

    請參閱File Locations或服務器節點信息的磁盤存儲部分以找到存儲數據文件的'數據'目錄。 vbucket文件將位於您的存儲桶後命名的「數據」子目錄中。

相關問題