无法增加RedisAtomicLong

时间:2014-06-17 15:46:31

标签: java redis jedis spring-data-redis

我正在尝试按给定的delta增加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"

2 个答案:

答案 0 :(得分:2)

我设法通过使用RedisAtomicLong的{​​{1}}实例redisTemplate实例化来解决问题:

RedisConnectionFactory

答案 1 :(得分:0)

我有类似的情况,我无法使用RedisAtomicInteger增加并且收到此错误" ERR值不是整数或超出范围"。

我使用template.opsForValue()。set(key,value)设置我的值,然后用于递增我使用的是RedisAtomicInteger操作。

此处的问题是默认模板使用默认序列化程序,即JdkSerializationRedisSerializer和RedisAtomicInteger对键和值使用StringRedisSerializer。所以我错误的是我使用一种类型的序列化程序设置我的值,然后使用另一种序列化程序递增它。

使用默认模板的递增和设置操作仍然会给出类似的错误,所以我使用RedisAtomicInteger进行所有get,set,increment操作。