我试图扫描JedisCluster中存储的特定密钥。
String product = "MMATest";
String redisServer = "mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com:6379,mycachecluster.eaogs8.0002.usw2.cache.amazonaws.com:6379";
Set<HostAndPort> jedisClusterNode = new HashSet<>();
String[] serversArray = redisServer.split(";");
for (String aServersArray : serversArray) {
jedisClusterNode.add(new HostAndPort(aServersArray.split(":")[0],
Integer.valueOf(aServersArray.split(":")[1])));
}
JedisCluster jedisCluster = new JedisCluster(jedisClusterNode,
buildPoolConfig());
ScanParams params = new ScanParams();
StringJoiner joiner = new StringJoiner("");
joiner.add("{");
joiner.add("Image-"+product);
joiner.add("}");
params.match(joiner.toString()).count(100);
System.out.println(joiner.toString());
ScanResult<String> scanResult = null;
String scanMarker = "0";
do {
scanResult = jedisCluster.scan(ScanParams.SCAN_POINTER_START, params);
System.out.println(scanResult.getResult());
System.out.println(!(scanResult.getResult() == null || scanResult.getResult().isEmpty()));
} while (!scanMarker.equals("0"));
ScanResult<Map.Entry<String,String>> scan = jedisCluster.hscan(joiner.toString(), ScanParams.SCAN_POINTER_START);
System.out.println(scan.getResult());
在这里,我得到了空值。但是群集节点中存储了一个值。
但是,如果我尝试扫描每个Jedis池,我将得到结果。
Map<String, JedisPool> jedisPools = jedisCluster.getClusterNodes();
Set<String>jedisPoolList = jedisPools.keySet();
System.out.println(jedisPools.keySet());
System.out.println(jedisPools.values());
System.out.println(jedisPools.size());
for (String hostAndPort : jedisPoolList) {
String[] parts = hostAndPort.split(":");
String host = parts[0];
int port = Integer.valueOf(parts[1]);
try (Jedis jedis = new Jedis(host, port)) {
ScanParams params = new ScanParams().match("Image-"+product).count(100);
String scanMarker = "0";
ScanResult<String> results = null;
do {
results = jedis.scan(scanMarker, params);
System.out.println("XXXX"+results.getResult());
System.out.println("XXXX"+!(results.getResult() == null || results.getResult().isEmpty()));
} while (!scanMarker.equals("0"));
}
}
为什么JedisCluster扫描方法无法提供正确的结果?我该如何解决这个问题?
注意:我可以jedisCluster.exists(key)
用来检查密钥的存在。但是我需要使用扫描,因为我可以对Jedis和JedisCluster使用相同的界面。
第1部分:
在您的实现中Jedis
,您与之匹配Image-MMATest
。在获取数据时,它证明了该密钥存储了数据。
但是,在JedisCluster
实现中,您已"Image-"+product
用花括号括起来。这意味着您实际上在匹配{Image- MMATest}
。您没有得到任何数据,因为该密钥没有存储任何数据。
第2部分:
在JedisCluster中,scan
支持仅限于Redis哈希标记模式。Image- MMATest
不是Redis哈希标签兼容模式。因此,您将无法Image-MMATest
使用scan
JedisCluster。
要通过scan
JedisCluster 获取数据,您必须将数据存储在Redis哈希标签兼容模式的密钥上,例如{Image-MMATest}
。
可以在本文档中找到有关Redis哈希标记的更多详细信息。
问题内容: 因此,我是一名新Java程序员,我试图弄清楚为什么一段代码无法正常工作。我遇到的问题是:“字符串兴趣= input.nextLine();”,它跳过了用户的输入并跳至下一个System.out,因此它仅在控制台中显示“您的个人资料…”在允许用户输入任何数据之前。抱歉,这是一个愚蠢的问题,我很新! 问题答案: 这样说: 其余代码可能与您上面的代码相同。 编辑: 它必须是这样的(我的意思是
问题内容: 我正在寻找红宝石客户端的一些文档,用于redis,但运气不佳。我正在使用键,但是我听说它们在生产Redis中的性能很差。 想切换到,但我没有找到任何示例。也尝试过 对此有点感激。谢谢。 编辑:将Redis客户端从3.0.4更新到3.0.7后, 工作。 问题答案: 像这样做: 这是您需要的“文档”。 请务必也可以参考官方文档中。
我做了一个简单的文件加密/解密器。它将模式和要操作的文件作为参数。加密时,它生成随机字符串并使用该字符串加密文件。解密文件时,它会提示用户输入密码,并在解密时使用该密码。 我的问题是,解密时得到的不是明文,而是胡言乱语,尽管我小心翼翼地将相同的密钥写入输入。 非常感谢James K Polk提供的加密/解密代码!
所以我试着做一个简单的java预订系统,但问题是扫描仪功能不起作用,所以程序不需要任何输入。我试着把扫描仪,但它显示了一个警告,当我试图运行程序时,局部变量没有被使用,因此扫描仪不工作,所以整个程序卡在输入部分,不做任何其他事情。我对java很陌生,正试图通过创建项目来学习,所以我将感谢任何帮助和建议,谢谢。这是代码:所以显示警告局部变量不被使用的部分或一行代码是行8,9,16,34,36,46,
我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O
我有一个程序,允许用户输入一个数字的学生数量,他们希望分配一个等级。然后,它打印出哪一个学生在总数中(例如6个中的1个),然后提示用户输入他们的名字和分数。 我的分数工作正确,但当最后的消息显示,我不能得到最大名称和第二个最大名称显示任何东西。