2012-03-21 1 views
0

Я добавляю значение в кеш-память с истечением 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

Во-первых, если вы установите что-то истекает в течение 1 секунды, вы не сможете получить его от Membase, если вы просите об этом больше, чем 1 секунду. Я бы предположил, что причина, по которой вы видите истечение, произошла позже, заключается в том, что вы указываете абсолютное время, а времена на вашем сервере и клиенте разные. Если ваш разорвать на 20 секунд позади клиента, я бы ожидал увидеть подобное поведение. Попытайтесь просто установить время истечения срока действия на 1, а затем вы должны увидеть, что происходит. Для значений менее 30 дней время является относительным. В течение более 30 дней время является абсолютным.

Внутри Membase, когда изделие истекло, оно не удаляется сразу. Задача истечения срока действия выполняется по умолчанию каждые 1 час и выполняет итерацию по всем клавишам и удаляет истекшие. Если у вас много ключей, срок действия которых истекает, вы можете установить задачу истечения времени выполнения чаще. Еще один способ, которым могут истечь, - это время, когда кеш Membase заполняется и элементы выгружаются из памяти. Истекшие элементы также могут быть удалены этой задачей.