Search code examples
databaseredisnosqlpipelinejedis

Redis SYNC and EXEC


Redis pipeline has 2 options to send commands to database "exec" and "sync". I'd want to know what is the difference between them.

I'll use Jedis ,java api for redis, for the examples.

Examples

Example 1

try (Jedis resource = redisManager.getResource()) {
    Pipeline pipeline = resource.pipelined();
    pipeline.multi();

    pipeline.del("test-1");
    pipeline.hset("test-2", "a", "b");

    pipeline.exec();
}

Example 2

try (Jedis resource = redisManager.getResource()) {
    Pipeline pipeline = resource.pipelined();
    pipeline.multi();

    pipeline.del("test-1");
    pipeline.hset("test-2", "a", "b");

    pipeline.sync();
}

Solution

  • pipeline execute method returns

    Response<List<?>>

    whereas sync returns void, however, to get response from pipeline using sync you have to capture individual responses, something like this.

    Response<Long> isDeleted = pipeline.del("test-1");
    Response<Long> isSuccess = pipeline.hset("test-2", "a", "b");
    Response<List<String>> hvals = pipeline.hvals("test-2");
    pipeline.sync();
    assertEquals(1, (long) isDeleted.get());