1

RedisAtomicLong特定のデルタでオブジェクトをインクリメントしようとしています:

private void updateBandwidthUsage(String remoteAddr, int length) {
    RedisAtomicLong counter = new RedisAtomicLong("someKey", redisTemplate)
    counter.getAndAdd(length);
    counter.expire(1, TimeUnit.DAYS);
}

これは失敗します

redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range

MONITORサーバーでコマンドを使用すると、次のように表示されます。

1403019417.097887 [0 10.0.2.2:46694] "INCRBY" "\xac\xed\x00\x05t\x00\x150:0:0:0:0:0:0:1:16238" "7625"

Spring Data Redis (1.3.0) と Jedis (2.5.1) コネクタを使用しています。サーバーは Redis 2.8.6 を実行しています。


編集: 奇妙なことに気付きました:setカウンターで手動で使用すると、Redis に送信されるデータがかなり奇妙に見えます:

1403020463.368050 [0 10.0.2.2:47127] "SET" "\xac\xed\x00\x05t\x00\x150:0:0:0:0:0:0:1:16238" "\xac\xed\x00\x05sr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x00"
4

2 に答える 2

2

のインスタンスでRedisAtomicLongをインスタンス化することで、問題を解決できました。redisTemplateRedisConnectionFactory

RedisAtomicLong counter = new RedisAtomicLong("someKey", redisTemplate.getConnectionFactory());
于 2014-06-18T07:29:12.063 に答える