Java 语言客户端
Maven 依赖
<dependency>
<groupId>com.bailizhang.lynxdb</groupId>
<artifactId>lynxdb-client</artifactId>
<version>2023.10.5-snapshot</version>
</dependency>
使用案例
简单的插入和查询数据的。
public class LynxDbClientDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
byte[] value = G.I.toBytes("value");
connection.insert(key, "columnFamily", "column", value);
byte[] findValue = connection.find(key, "columnFamily", "column");
System.out.println(G.I.toString(findValue));
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Insert 插入数据
public class InsertKeyDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
byte[] value = G.I.toBytes("value");
connection.insert(key, "columnFamily", "column", value);
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Insert 插入多列数据
public class InsertMultiColumnsDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
HashMap<String, byte[]> multiColumns = new HashMap<>();
for(int i = 0; i < 10; i ++) {
String column = "column" + i;
byte[] value = G.I.toBytes("value" + i);
multiColumns.put(column, value);
}
connection.insert(key, "columnFamily", multiColumns);
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Insert 插入 Java 对象
@LynxDbColumnFamily("insert-object")
表示数据插入的 Column Family 为 "insert-object"
,@LynxDbKey
用来标记 Key 字段,@LynxDbColumn
用来标记 Column 字段,Java Object 与数据存储中的对应关系为:
Java 对象:
{key="key", column0="value0", column1="value1", column2="value2"}
数据表中存储:
key | column0 | column1 | column2 |
---|---|---|---|
"key" | "value0" | "value1" | "value2" |
public class InsertObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
DemoObject demoObject = new DemoObject();
demoObject.setKey("key");
demoObject.setColumn0("value0");
demoObject.setColumn1("value1");
demoObject.setColumn2("value2");
connection.insert(demoObject);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
private static class DemoObject {
@LynxDbKey
private String key;
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Insert 插入超时数据
public class InsertTimeoutKeyDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
byte[] value = G.I.toBytes("value");
long timeout = System.currentTimeMillis() + 30 * 1000; // 数据在 30s 后超时
connection.insert(key, "columnFamily", "column", timeout, value);
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Insert 插入多列超时数据
给多个列同时设置同一个超时时间。
public class InsertMultiTimeoutColumnsDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
HashMap<String, byte[]> multiColumns = new HashMap<>();
for(int i = 0; i < 10; i ++) {
String column = "column" + i;
byte[] value = G.I.toBytes("value" + i);
multiColumns.put(column, value);
}
long timeout = System.currentTimeMillis() + 30 * 1000; // 数据在 30s 后超时
connection.insert(key, "columnFamily", timeout, multiColumns);
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Insert 插入超时 Java 对象
public class InsertTimeoutObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
DemoObject demoObject = new DemoObject();
demoObject.setKey("key");
demoObject.setColumn0("value0");
demoObject.setColumn1("value1");
demoObject.setColumn2("value2");
long timeout = System.currentTimeMillis() + 30 * 1000;
connection.insert(demoObject, timeout);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
private static class DemoObject {
@LynxDbKey
private String key;
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Find 查询数据
public class FindByKeyDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
byte[] value = connection.find(key, "columnFamily", "column");
System.out.println(G.I.toString(value));
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Find 查询多个列
public class FindMultiColumnsDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
HashMap<String, byte[]> multiColumns = connection.findMultiColumns(key, "columnFamily");
multiColumns.forEach((column, value) -> System.out.println(column + ": " + G.I.toString(value)));
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Find 查找 Java 对象
public class FindByClassDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
DemoObject demoObject = connection.find("key", DemoObject.class);
System.out.println(demoObject);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
public static class DemoObject {
@LynxDbKey
private String key;
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Exist 查询 Key 是否存在
public class ExistKeyDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
boolean isExisted = connection.existKey(key, "columnFamily", "column");
System.out.println(isExisted);
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Exist 查询 Key 是否存在(Java Object 方式)
@LynxDbMainColumn
用来标记主列,查询的是被标记的列上 Key 是否存在。
public class ExistKeyByObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
DemoObject demoObject = new DemoObject();
demoObject.setKey("key");
boolean isExisted = connection.existKey(demoObject);
System.out.println(isExisted);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
public static class DemoObject {
@LynxDbKey
private String key;
@LynxDbMainColumn
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Range Next 向后的范围查找
public class RangeNextDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] beginKey = G.I.toBytes("");
List<Pair<byte[], HashMap<String, byte[]>>> multiColumns = connection.rangeNext(
"columnFamily",
"column",
beginKey,
10
);
multiColumns.forEach(pair -> {
System.out.println("Key: " + G.I.toString(pair.left()));
pair.right().forEach((column, value) ->
System.out.println("Column: " + column + ", " + "Value: " + G.I.toString(value)));
});
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Range Next 向后的范围查找(Java Object 的方式返回)
public class RangeNextObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] beginKey = G.I.toBytes("");
List<DemoObject> demoObjects = connection.rangeNext(DemoObject.class, beginKey, 10);
System.out.println(demoObjects);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
public static class DemoObject {
@LynxDbKey
private String key;
@LynxDbMainColumn
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Range Before 向前的范围查找
public class RangeBeforeDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] beginKey = G.I.toBytes("key9");
List<Pair<byte[], HashMap<String, byte[]>>> multiColumns = connection.rangeBefore(
"columnFamily",
"column",
beginKey,
10
);
multiColumns.forEach(pair -> {
System.out.println("Key: " + G.I.toString(pair.left()));
pair.right().forEach((column, value) ->
System.out.println("Column: " + column + ", " + "Value: " + G.I.toString(value)));
});
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Range Before 向前的范围查找(Java Object 的方式返回)
public class RangeBeforeObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] beginKey = G.I.toBytes("key9");
List<DemoObject> demoObjects = connection.rangeBefore(DemoObject.class, beginKey, 10);
System.out.println(demoObjects);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
public static class DemoObject {
@LynxDbKey
private String key;
@LynxDbMainColumn
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}
Delete 删除 Key
public class DeleteKeyDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
connection.delete(key, "columnFamily", "column");
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Delete 删除多个 Column 的 Key
deleteMultiColumns()
方法设计的冗余了,未来将会删掉。
public class DeleteMultiColumnsDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
byte[] key = G.I.toBytes("key");
connection.deleteMultiColumns(key, "columnFamily", "column", "column1");
} catch (ConnectException e) {
e.getStackTrace();
}
}
}
Delete 删除 Key(通过 Java Object)
public class DeleteByObjectDemo {
public static void main(String[] args) {
G.I.converter(new Converter(StandardCharsets.UTF_8));
try(LynxDbClient client = new LynxDbClient()) {
client.start();
LynxDbConnection connection = client.createConnection("127.0.0.1", 7820);
DemoObject demoObject = new DemoObject();
demoObject.setKey("key");
connection.delete(demoObject);
} catch (ConnectException e) {
e.getStackTrace();
}
}
@Data
@LynxDbColumnFamily("demo-object")
public static class DemoObject {
@LynxDbKey
private String key;
@LynxDbColumn
private String column0;
@LynxDbColumn
private String column1;
@LynxDbColumn
private String column2;
}
}