2014-12-05 122 views
4

我正在使用Couchbase 3.o和.Net SDK(V2.0)。我正在使用它作爲分佈式緩存。我需要實現「清除」方法來清除緩存中的所有項目。這意味着刪除桶中的所有文檔。我沒有看到Bucket或Cluster上的任何方法來執行此操作。有沒有其他的API可以使用?刪除couchbase桶中的所有文檔

由於

回答

4

的Couchbase .NET SDK有一個刷新命令,這裏是如何使用它的例子:

var configuration = new ClientConfiguration 
{ 
    Servers = new List<Uri> 
    { 
     new Uri(ConfigurationManager.AppSettings["bootstrapUrl"]) 
    } 
}; 
using (var cluster = new Cluster(configuration)) 
{ 
    using (var bucket = cluster.OpenBucket()) 
    { 
     var manager = bucket.CreateManager("Administrator", ""); 
     var result = manager.Flush(); 
     Assert.IsTrue(result.Success); 
    } 
} 
1

這不是一個標準操作couchbase(也不在分佈式緩存)。最好的方法是在couchbase服務器中實現一個視圖,該視圖將列出所有文檔鍵,然後在所有鍵上調用Remove。

視圖定義會是這樣(在JavaScript):

function (doc, meta) 
{ 
    emit(meta.id, null); 
} 
+2

按照柯克的答案,這裏還有如果你的水桶啓用刷新操作。請注意,這實際上是物理刪除磁盤上的數據,因此比刪除文檔的標準方式(僅標記和推遲實際刪除)效率更低。如果您有多個數據中心,它也不會通過XDCR進行復制。 – 2014-12-08 08:38:22

2

你正在尋找的關鍵詞是「刷新」。這是爲了這樣一個任務。我知道有a REST API call在服務器上執行此操作,但我認爲.NET SDK 2.0中有一種方法可以執行此操作。只要確保你打開flush capability at the bucket level on the server。否則它將無法工作。

作爲一個總體緩存失效策略,我寧願看到你爲每個放入Couchbase的數據設置一個TTL,讓Couchbase隨着時間的推移刪除這些對象,而不是按照你所說的方式轉儲緩存關於。

在完全不同的說明中,請確保您使用的是2.0版.NET SDK的GA版本,因爲它剛剛發佈,並且Couchbase 3.0.1因爲3.0版本中存在一個令人討厭的錯誤。