Как я могу увеличить значение memcached с помощью.NET enyim?
В интернете, похоже, нет информации или документации о методе приращения Enyim. Я не могу понять, что он делает. В документации говорится:
Increment(string key, ulong defaultValue, ulong delta);
"Увеличивает значение указанного ключа на заданную сумму. Операция происходит на сервере атомарно".
Звучит все хорошо и хорошо, если я смогу заставить его работать.
Хотя никто не имеет много четких ответов, все согласны с тем, что метод должен установить значение на заданное значение по умолчанию, если ключ не существует в memcached. Однако я не могу на всю жизнь получить ключ для сохранения значения по умолчанию.
Я не хочу использовать комбо (store + increment), потому что его нужно использовать в многосерверной архитектуре, и я не могу гарантировать, что операция будет атомарной.
Любые идеи или указатели о том, как успешно увеличить значение ключа memcached? Супер бонусом было бы также иметь значение по умолчанию, чтобы иметь время для жизни.
Редактировать: я пробовал это как в "текстовом", так и в "двоичном" протоколах и, похоже, не могу установить значение по умолчанию в любом из этих параметров.
Заранее спасибо за помощь!
1 ответ
Этот пост может быть немного старым, но здесь приведен фрагмент кода для обработки команды Increment с использованием Enyim memcacheD.
client.Store(StoreMode.Set, "mykey", "5");
var incrementedValue = client.Increment("mykey", 2, 1);
В приведенном выше примере начальное значение ключа mykey было установлено равным 5. Обратите внимание, что значение должно быть целым числом в строковом формате ( "5", а не 5).
Вторая строка будет увеличивать значение на 1. Если ключ не существует, он устанавливает значение в 2, не увеличивая его.
Следующий фрагмент использует перегрузку TTL.
//initial set, considering that the key did not exist before, the value will be 5
//and it will be valid for 6 seconds
var initialValue = client.Increment("mykey", 5, 1, TimeSpan.FromSeconds(6));
Console.WriteLine(initialValue); //5
//this will increament the value by 1, keeps it in cache for 10 seconds
var incremented = client.Increment("mykey", 5, 1, TimeSpan.FromSeconds(10));
var cachedData = client.Get("mykey");
Console.WriteLine(cachedData); //6
Thread.Sleep(11*1000);
var cachedData_afterExpiry = client.Get("mykey");
Console.WriteLine(cachedData_afterExpiry??"NULL");//this should be null