Некоторое время назад возникла проблема (spymemcached bug 41).Вот что Дастин Саллингс, создатель Spymemcached, сказал о проблеме:
Нельзя смешивать IntegerTranscoder и incr / decr.incr / decr требует, чтобы числа были закодированы в виде строк, поскольку они являются независимыми от языка операциями на стороне сервера.
Вот модульный тест, который демонстрирует, что вы пытаетесь сделать:
public void testIncrDecrBug41() throws Exception {
final String key="incrdecrbug41";
// set to zero
client.set(key, 86400, "0");
// retrieve it to see if it worked
assertEquals("0", client.get(key));
// increment it
assertEquals(1, client.incr(key, 1));
// fetch it again to see if it worked
assertEquals("1", client.get(key));
}
Обратите внимание, что причина, по которой вы получаете 49, заключается в том, что десятичное число 49 - это строка «1».
incr и decr вызывают у многих людей путаницу из-за семантики на стороне сервера.В более новой версии memcached (например, изменения, которые я еще не применял в моей двоичной ветке), incr и decr не будут работать с нечисловыми строковыми значениями.То есть ваш первый incr выдаст исключение.
В будущем, пожалуйста, сообщайте об ошибках на веб-сайте проекта Spymemcached.Его можно найти по адресу http://code.google.com/p/spymemcached. Таким образом, мы сможем исправить их раньше.