Как я могу увеличить значение memcached с помощью .NET enyim?

1

Интернет, по-видимому, совершенно не лишен информации или документации об методе Enyim Increment. Я не могу понять, что он делает. В документации указано:

 Increment(string key, ulong defaultValue, ulong delta);

"Увеличивает значение указанного ключа на заданную величину. Операция происходит на сервере атомарно".

Это звучит хорошо и хорошо, если я могу заставить его работать.

Хотя никто не имеет много четких ответов, консенсус, похоже, заключается в том, что предполагается, что метод должен установить значение для данного значения по умолчанию, если ключ не существует в memcached. Тем не менее, я не могу за всю жизнь получить ключ, чтобы сохранить значение по умолчанию.

Я не хочу использовать комбинацию (store + increment), потому что она должна использоваться в многосерверной архитектуре, и я не мог гарантировать, что операция будет атомарной.

Любые идеи или указатели на то, как успешно увеличить значение ключа memcached? Супер бонус должен был также иметь значение по умолчанию иметь время, чтобы жить, а также.

Редактирование: я пробовал это как в протоколах "Текст", так и "Бинарный" и, похоже, не смог установить значение по умолчанию в любой настройке.

Заранее спасибо за помощь!

Теги:
memcached

1 ответ

2
Лучший ответ

Это сообщение может быть немного старым, но вот фрагмент кода для обработки команды 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 
  • 0
    Это хороший ответ. Знаете ли вы, если он может быть использован с TTL?
  • 0
    Пожалуйста, проверьте отредактированный ответ. Надеюсь, это поможет
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню