我向couchbase缓存添加一个值,到期时间为1秒,但是它已超过20秒。什么是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 :(得分:0)
首先,如果你设置的东西在1秒内到期,如果超过1秒后你要求它,你将无法从Membase中获得它。我猜你之后看到过期的原因是你指定的是绝对时间,服务器和客户端的时间是不同的。如果您的服务器落后于客户端20秒,那么我希望看到这种行为。尝试将到期时间设置为1然后您应该看到正确的事情发生。对于小于30天的值,时间是相对的。超过30天的时间是绝对的。
当项目过期时,Membase内部不会立即删除。有一个到期任务,默认情况下每1小时运行一次,并遍历所有密钥并删除过期密钥。如果您有许多密钥到期,那么您可以将到期任务设置为更频繁地运行。项目过期的另一种方式是当Membase缓存变满并且项目从内存中逐出时。此任务也可以删除过期的项目。