ERR与Jedis在一行上的hset参数的错误数目。使用Jedis存在

时间:2019-09-12 11:31:47

标签: java redis jedis

我正在将Jedis用于使用Redis的Java项目。该代码给我一个问题的想法是将obj插入redis的哈希集中。如果该类型的对象已在redis中插入,我想复制redis条目并将该对象写入重复的行。

第一个循环创建将对象写入键的列表,第二个循环将对象写入键。

出现一个问题,jedis hexists方法抛出此错误:

redis.clients.jedis.exceptions.JedisDataException: ERR wrong number of arguments for 'hset' command

我尝试重写代码以使用hgetsall并在生成的映射上进行迭代,但是随后错误仅移至hgetsall方法。我认为使用hexists方法该错误没有任何意义,并且是在其他地方引起的。我不知道在哪里。

要注意的另一件事是,该方法在抛出错误之前可以多次运行。

因此,这是导致问题的代码:

protected void generalProcessing(WebtrekkFileModel obj, Jedis jedis) {
        try{
            List<String> newKeys = new ArrayList<>();
            List<String> toWrite = new ArrayList<>();
            keyHandler.matchKeys(obj.getSid(), obj.getEid(), obj.getRid())
                    .forEach(k -> {
                        if (existsInRedis(jedis, obj, k)) {
                            newKeys.add("+" + k);
                            toWrite.add("+" + k);
                            jedis.hset("+" + k, jedis.hgetAll(k));
                        } else {
                            toWrite.add(k);
                        }
                    });
            keyHandler.addKeys(newKeys, obj);
            Pipeline pipe = jedis.pipelined();
            toWrite.forEach(k -> {
                pipe.hset(k, obj.toHashMap());
            });
            pipe.sync();
        }catch (Exception e){
            e.printStackTrace();
            LOG.error("Something went wrong connecting during the processing loop: " + e.getMessage());
        }
    }

    protected boolean existsInRedis(Jedis jedis, WebtrekkFileModel obj, String key){
        try {
            return Boolean.TRUE.equals(jedis.hexists(key, obj.toHashMap().keySet().iterator().next())); //this is line 92
        }catch (JedisDataException e){
            LOG.error("Error checking existence of obj " + obj.getPrefix() + " in key " + key, e );
            return false;
        }
    }

这是产生的错误:

redis.clients.jedis.exceptions.JedisDataException: ERR wrong number of arguments for 'hset' command at ... impl.Workers.impl.AbstractWorker.existsInRedis(AbstractWorker.java:92)

我将不胜感激,非常感激。 谢谢。

0 个答案:

没有答案