我们正在尝试构建一个控制台来处理Redis查询。但是,在后端,我们需要使用Jedis。因此,需要使用Jedis处理作为输入给出的命令。例如,在redis-cli中,我们使用“ keys *”。同样,我们在Jedis中使用jedis.keys(“ *”)。我不知道如何将“ keys *”转换为jedis.keys(“ *”)。请告诉我一些建议。...
答案 0 :(得分:1)
我知道这是一个老问题,但是希望以下内容对其他人有用。
这是我想出的东西,因为Jedis的最新版本(截至目前为3.2.0)不支持Redis> = 4上可用的“内存使用”命令。此代码假定{{{1 }}对象可能是从Jedis资源池中创建的:
Jedis
这是一种特殊情况的命令,因为它具有一个主关键字import redis.clients.jedis.util.SafeEncoder;
// ... Jedis setup code ...
byteSize = (Long) jedis.sendCommand(new ProtocolCommand() {
@Override
public byte[] getRaw() {
return SafeEncoder.encode("memory");
}},
SafeEncoder.encode("usage"),
SafeEncoder.encode(key));
和一个辅助动作memory
(其他关键字是usage
,doctor
,stats
等)。在向Redis发送多关键字命令时,必须将关键字视为一个列表。我第一次尝试将purge
指定为单个参数失败,但发生Redis服务器错误。
随后,当前的Jedis实现似乎是针对单关键字命令的,因为在幕后有很多特殊的代码来处理诸如memory usage
这样的多关键字命令,命令关键字框架。
无论如何,一旦我当前需要调用debug object
能力的项目完成,我将尽力为Jedis维护者提供补丁,以更正式/常规的方式实施上述命令,看起来像这样:
memory usage
最后,为了满足您的特定需求,最好的选择是使用Jedis类的scan()方法。 SO上有一些文章介绍了如何使用scan()方法。
答案 1 :(得分:0)
嗯...您可以通过参考以下内容进行相同的操作。
redis.clients.jedis.Connection.sendCommand(Command, String...)
创建一个class extend Connection
。
创建一个class extend Connection
实例并调用connect()
方法。
致电super.sendCommand(Protocol.Command.valueOf(args[0].toUpperCase()), args[1~end])
。
给你的例子:
public class JedisConn extends Connection {
public JedisConn(String host, int port) {
super(host, port);
}
@Override
protected Connection sendCommand(final Protocol.Command cmd, final String... args) {
return super.sendCommand(cmd, args);
}
public static void main(String[] args) {
JedisConn jedisConn = new JedisConn("host", 6379);
jedisConn.connect();
Connection connection = jedisConn.sendCommand(Protocol.Command.valueOf(args[0].toUpperCase()), Arrays.copyOfRange(args, 1, args.length));
System.out.println(connection.getAll());
jedisConn.close();
}
}
哈哈~~
答案 2 :(得分:0)
我已经找到了解决方法。有一个名为eval()的函数。我们可以使用它,如下所示。
`Scanner s=new Scanner(System.in);String query=s.nextLine();
String[] q=query.split(" ");
String cmd='\''+q[0]+'\'';
for(int i=1;i<q.length;i++)
cmd+=",\'"+q[i]+'\'';
System.out.println(j.eval("return redis.call("+cmd+")"));`