Как я могу увеличить значение 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 
Другие вопросы по тегам