valkey-java
Java · valkey-java 5.5.0 · RESP2
所列测试通过
测试连接设置
io.valkey.Jedis standalone connection
测试目标:127.0.0.1:6379,用户名 default,测试密码 manual-test-only,默认数据库。该密码只用于一次性的本地测试容器。
已验证操作
- authenticated PING
- SET
- Unicode GET
- missing GET
- HGET
- pipeline
- MULTI/EXEC
- Lua EVAL
范围限于下方程序中的确切 API 调用与断言。
可执行测试示例
此程序已在隔离 Docker 镜像中执行。它包含多个客户端分支;本页使用下面列出的参数。依赖和编译步骤位于测试目录的 Dockerfile 中。
java -cp "/clients:/clients/jars/*" Clients valkey查看已执行的完整源代码
// Run: java -cp '/clients:/clients/jars/*' Clients jedis|valkey|lettuce
import java.util.*;
import redis.clients.jedis.Jedis;
public class Clients {
static String installedVersion(String group, String artifact) {
String file="META-INF/maven/"+group+"/"+artifact+"/pom.properties";
try(var input=Clients.class.getClassLoader().getResourceAsStream(file)) {
if(input==null)throw new IllegalStateException("Missing installed package metadata: "+file);
var properties=new Properties();properties.load(input);return Objects.requireNonNull(properties.getProperty("version"));
} catch(java.io.IOException error){throw new RuntimeException(error);}
}
static List<String> checks = new ArrayList<>();
static void check(String name, Object actual, Object expected) {
if (!Objects.equals(actual, expected)) throw new AssertionError(name+": "+actual+" != "+expected);
checks.add(name);
}
public static void main(String[] args) {
String library=args[0], version="";
if (library.equals("jedis")) {
version=installedVersion("redis.clients","jedis");
try (var client=new Jedis("127.0.0.1",6379)) {
client.auth("default","manual-test-only");
check("authenticated PING",client.ping(),"PONG");
check("SET",client.set("java:text","Hello 世界"),"OK");
check("Unicode GET",client.get("java:text"),"Hello 世界");
check("missing GET",client.get("java:missing"),null);
client.hset("java:hash","field","value");check("HGET",client.hget("java:hash","field"),"value");
try(var p=client.pipelined()){p.set("java:counter","1");var n=p.incr("java:counter");p.sync();check("pipeline",n.get(),2L);}
try(var tx=client.multi()){tx.set("java:counter","3");tx.incr("java:counter");check("MULTI/EXEC",tx.exec(),List.of("OK",4L));}
check("Lua EVAL",client.eval("return redis.call('GET',KEYS[1])",List.of("java:counter"),List.of()),"4");
client.psetex("java:expiry",60000,"value");long ttl=client.pttl("java:expiry");check("PSETEX/PTTL",ttl>0&&ttl<=60000,true);
}
} else if(library.equals("valkey")) {
version=installedVersion("io.valkey","valkey-java");
try (var client=new io.valkey.Jedis("127.0.0.1",6379)) {
client.auth("default","manual-test-only");
check("authenticated PING",client.ping(),"PONG");
check("SET",client.set("java:text","Hello 世界"),"OK");
check("Unicode GET",client.get("java:text"),"Hello 世界");
check("missing GET",client.get("java:missing"),null);
client.hset("java:hash","field","value");check("HGET",client.hget("java:hash","field"),"value");
try(var p=client.pipelined()){p.set("java:counter","1");var n=p.incr("java:counter");p.sync();check("pipeline",n.get(),2L);}
try(var tx=client.multi()){tx.set("java:counter","3");tx.incr("java:counter");check("MULTI/EXEC",tx.exec(),List.of("OK",4L));}
check("Lua EVAL",client.eval("return redis.call('GET',KEYS[1])",List.of("java:counter"),List.of()),"4");
}
} else {
version=installedVersion("io.lettuce","lettuce-core");
var uri=io.lettuce.core.RedisURI.Builder.redis("127.0.0.1",6379).withAuthentication("default","manual-test-only").withTimeout(java.time.Duration.ofSeconds(5)).build();
var client=io.lettuce.core.RedisClient.create(uri);
try(var connection=client.connect()) {
var c=connection.sync();check("authenticated PING",c.ping(),"PONG");
check("SET",c.set("java:text","Hello 世界"),"OK");check("Unicode GET",c.get("java:text"),"Hello 世界");check("missing GET",c.get("java:missing"),null);
c.hset("java:hash","field","value");check("HGET",c.hget("java:hash","field"),"value");
c.multi();c.set("java:counter","3");c.incr("java:counter");var results=c.exec();check("MULTI/EXEC count",results.size(),2);check("MULTI/EXEC value",results.get(1),4L);
check("Lua EVAL",c.eval("return redis.call('GET',KEYS[1])",io.lettuce.core.ScriptOutputType.VALUE,new String[]{"java:counter"}),"4");
} finally {client.shutdown();}
}
String names=String.join(",",checks.stream().map(x->"\""+x+"\"").toList());
System.out.println("{\"library\":\""+library+"\",\"version\":\""+version+"\",\"checks\":["+names+"],\"status\":\"passed\"}");
}
}
测试环境与可复现证据
验证时间: 2026-09-21T11:15:27Z · Docker / Linux aarch64 · lavik 0.1.0-beta.1
存储与连接: io_uring · 临时文件、2 个工作线程、单机、明文 TCP、密码认证。此测试不衡量 NVMe 性能。
固定源码: 3955b98d43b312324aa8d52775df52cfb111c0d0
二进制 SHA-256: 8306b37ddf05023f85166a6aa2192b7084757e8defd342b602e6470244aca887
镜像: sha256:fd13690a1931b8abb31b1866baa2a08c7c38e6df93aa78883321d1d3c1cddd00