@Override
    public <R> RFuture<R> evalAsync(Mode mode, String luaScript, ReturnType returnType, List<Object> keys, Object... values) {
        String key = getKey(keys);
        return evalAsync(key, mode, luaScript, returnType, keys, values);
    }
@Test
    public void testEvalAsync() {
        RScript script = redisson.getScript(StringCodec.INSTANCE);
        RFuture<List<Object>> res = script.evalAsync(RScript.Mode.READ_ONLY, "return {'1','2','3.3333','foo',nil,'bar'}", RScript.ReturnType.MULTI, Collections.emptyList());
        assertThat(res.toCompletableFuture().join()).containsExactly("1", "2", "3.3333", "foo");
    }