Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绝地管道例外_Java_Redis_Jedis - Fatal编程技术网

Java 绝地管道例外

Java 绝地管道例外,java,redis,jedis,Java,Redis,Jedis,当我使用绝地武士时,就像下面的代码: public class JedisTest extends Sync { private static final String _SET_KEY_1 = "test1"; private static final String _SET_KEY_2 = "test2"; public void process() throws SQLException { Set<String> appSet = g

当我使用绝地武士时,就像下面的代码:

public class JedisTest extends Sync {
    private static final String _SET_KEY_1 = "test1";
    private static final String _SET_KEY_2 = "test2";

    public void process() throws SQLException {
        Set<String> appSet = getAllUserableAppkey();
        final ShardedJedis jedis = RedisHelper.getJedis();
        final ShardedJedisPipeline pipeline = jedis.pipelined();

        for (String key : appSet) {
            Set<String> result = jedis.smembers(_SET_KEY_1);
            Set<String> result2 = jedis.smembers(_SET_KEY_2);
            String rangName = String.format("%s::%s", "test", key);
            for (int i = 0; i < 10; i++) {
                pipeline.sadd(rangName, String.valueOf(i));
            }
        }
        pipeline.sync();
    }

    public Set<String> getAllUserableAppkey() {

    }

    public static void main(String[] args) throws Exception {
        DbHelper.init();
        RedisHelper.init();
        JedisTest jedisTest = new JedisTest();
        try {
            jedisTest.process();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
我可以修改代码以进行更正,如:

public void process() throws SQLException {
    Set<String> appSet = getAllUserableAppkey();
    final ShardedJedis jedis = RedisHelper.getJedis();
    for (String key : appSet) {
        final ShardedJedisPipeline pipeline = jedis.pipelined();
        Set<String> result = jedis.smembers(_SET_KEY_1);
        Set<String> result2 = jedis.smembers(_SET_KEY_2);
        //log.warn("result1 :{},result2:{}",result,result2);
        String rangName = String.format("%s::%s", "test", key);
        for (int i = 0; i < 10; i++) {
            pipeline.sadd(rangName, String.valueOf(i));
        }
        pipeline.sync();
    }
}
public void process()引发SQLException{
Set-appSet=getAllUserableAppkey();
最终碎片绝地=RedisHelper.getJedis();
for(字符串键:appSet){
最终SharedJediSpipeline管道=绝地。管道();
设置结果=绝地武士人数(_Set_KEY_1);
Set result2=绝地武士人数(_Set_KEY_2);
//warn(“result1:{},result2:{}”,result,result2);
String rangName=String.format(“%s::%s”,“test”,key);
对于(int i=0;i<10;i++){
pipeline.sadd(rangName,String.valueOf(i));
}
sync();
}
}
但是我不知道为什么会抛出异常,
pipline.sadd()
绝地武士.smembers
冲突吗? 谢谢你回答我


绝地武士是最新版本:2.7.2

管道连接时不应直接使用绝地武士实例

管道使用绝地实例的流(而不是初始化新流),由于正常操作会立即读取响应,管道会在稍后读取整个响应,所以混合使用这两种方法会让绝地陷入麻烦

p—管道化/N—正常

请求-->p(1)p(2)N(3)N(4)p(5)

Redis响应-->p(1)p(2)N(3)N(4)p(5)

匹配的请求-响应-->N(1:应为3)N(2:应为4)p(3:应为1)p(4:应为2)p(5)


您可以看到,响应很容易出错。

谢谢您的回答,在第一个示例代码中,我使用fresh jedis实例执行正常操作,另一个实例执行管道操作,它很有效。太棒了!很乐意帮忙。
public void process() throws SQLException {
    Set<String> appSet = getAllUserableAppkey();
    final ShardedJedis jedis = RedisHelper.getJedis();
    for (String key : appSet) {
        final ShardedJedisPipeline pipeline = jedis.pipelined();
        Set<String> result = jedis.smembers(_SET_KEY_1);
        Set<String> result2 = jedis.smembers(_SET_KEY_2);
        //log.warn("result1 :{},result2:{}",result,result2);
        String rangName = String.format("%s::%s", "test", key);
        for (int i = 0; i < 10; i++) {
            pipeline.sadd(rangName, String.valueOf(i));
        }
        pipeline.sync();
    }
}