我在Java上使用tile38.com和lettuce.io。我正在尝试按照文档enter link description here发送自定义NEARBY fleet FENCE POINT 33.462 -112.268 6000
命令,但我不知道该怎么做。
我一直在使用生菜中的CommandType
,但我找不到发送NEARBY
的方法。有人知道我该怎么做吗?
由于
答案 0 :(得分:4)
您有多个选项可以发送自定义命令:
使用自定义命令,您基本上定义了一个实现ProtocolKeyword
界面的类型,它可以帮助您作为命令中涉及的所有关键字的单一参考点。您可以使用同步,异步或响应API来调用命令:
enum MyKeywords implements ProtocolKeyword {
NEARBY, FENCE, POINT;
private final byte name[];
MyKeywords() {
// cache the bytes for the command name. Reduces memory and cpu pressure when using commands.
name = name().getBytes();
}
@Override
public byte[] getBytes() {
return name;
}
}
CommandArgs<String, String> args = new CommandArgs<>(codec).addKey(key).add(MyKeywords.FENCE).add("POINT").add(lon).add(lat)
List<Object> response = connection.sync().dispatch(MyCommands.FENCE, new NestedMultiOutput<>(codec), args);
命令接口通过在Java接口上声明命令方法为您提供更高级别的抽象。它由一个方法签名声明,该签名与您的命令相匹配,并且比自定义命令更简洁:
interface Tile38 {
@Command("NEARBY ?0 FENCE POINT ?1 ?2")
List<Object> nearByFence(String key, double lon, double lat);
}
RedisClient client = …
RedisCommandFactory factory = new RedisCommandFactory(client.connect());
Tile38 commands = factory.getCommands(Tile38.class);
请注意,我不熟悉Tile38命令响应。因此,所有代码都使用List<Object>
,这是最通用的返回类型。