Jedis java.lang.Long无法转换为[B

时间:2016-11-23 16:05:10

标签: redis classcastexception jedis


我得到了#java; java.lang.ClassCastException:java.lang.Long无法转换为[B"在运行此代码时:

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMinIdle(1);
config.setMaxWaitMillis(30000);
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);

Jedis jedis = null;
jedis = jedisPool.getResource();

String msisdn = "3331122333";
Long balance = new Long(1000);
int balanceValidity = 30;

Transaction t = jedis.multi();
t.watch(msisdn);
t.set(msisdn, balance.toString());
t.expire(msisdn, balanceValidity);
t.exec();

Everythings正常运行此代码:

Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();

        jedis.watch(msisdn);
        jedis.set(msisdn, balance.toString());      
        jedis.expire(msisdn, balanceValidity);
        jedis.publish("myChannel", msisdn + " " + balance.toString());

    } finally {
        if (jedis != null)
            jedis.close();
    }

这些使用过的部分:

  • Redis 3.2.4
  • Jedis client 2.9.0
  • JDK 1.6

2 个答案:

答案 0 :(得分:1)

Jedis不是线程安全的。

在执行某些操作时,每次从池中获取jedis实例。之后关闭jedis实例,以便它回到池中

答案 1 :(得分:0)

redis不支持事务内部的watch命令。使用jedis对象在交易前添加watch命令。

https://github.com/redis/jedis/pull/2033