0

我向 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;
    }
4

1 回答 1

0

首先,如果您将某些内容设置为 1 秒后过期,如果您在超过 1 秒后请求它,您将无法从 Membase 获取它。我猜你看到过期发生的原因是你指定了一个绝对时间,而你的服务器和客户端上的时间是不同的。如果您的服务器比客户端晚 20 秒,那么我希望看到这种行为。尝试将到期时间设置为 1,然后您应该会看到正确的事情发生。对于小于 30 天的值,时间是相对的。超过 30 天的时间是绝对的。

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

于 2012-03-25T04:02:47.380 回答