2012-03-21 135 views
0

我向couchbase缓存添加一个值,过期时间为1秒,但过期时间超过20秒。 membase的缓存过期策略是什么?Membase缓存过期策略

这里是我的代码

public string TestCache() 
    { 
     String spoon = null; 
     using (var client = new CouchbaseClient()) 
     { 

      spoon=client.Get<string>("Spoon"); 
      if(string.IsNullOrEmpty(spoon)) 
      { 
       client.Store(StoreMode.Set, 
          "Spoon", 
          "Hello, Couchbase! Cache data is" + DateTime.Now.ToString(), 
          TimeSpan.FromSeconds(1)); 
      } 

      spoon = client.Get<string>("Spoon"); 
     } 

     return string.IsNullOrEmpty(spoon) 
     ? "Can not get data from cache" 
     : "Data from cache: " + spoon; 
    } 

回答

0

首先,如果你设置的东西在1秒内到期,你将不能够,如果你问它超过1秒后,从Membase的得到它。我猜想你后来看到失效的原因是你指定了一个绝对时间,并且你的服务器和客户端的时间是不同的。如果你的服务器落后于客户20秒,那么我期望看到这种行为。尝试设置到期时间为1,然后你应该看到正确的事情发生。对于小于30天的值,时间是相对的。超过30天的时间是绝对的。

Inside Membase当一个项目过期时,它不会立即被删除。有一个过期任务默认每1小时运行一次,并遍历所有密钥并删除过期的任务。如果您有很多密钥过期,那么您可以将过期任务设置为更频繁地运行。项目可以过期的另一种方式是当Membase缓存变满并且项目从内存中逐出时。此任务也可以删除过期的项目。