- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想通过以下代码片段使用 Jedis 从 Redis 集群获取所有 key :
public void testRedis() {
String key = "*";
ScanParams scanParams = new ScanParams().count(1000).match("{*}");
String cur = SCAN_POINTER_START;
do {
ScanResult<String> scanResult = getRedisCluster().scan(cur, scanParams);
scanResult.getResult().stream().forEach(System.out::println);
cur = scanResult.getStringCursor();
} while (!cur.equals(SCAN_POINTER_START));
}
我的问题是这个解决方案没有返回任何结果。即使我为现有 key 指定匹配模式,它仍然无法正常工作。我尝试使用 get 命令获取特定键,它返回值时没有任何错误,所以连接似乎很好。
有什么建议吗?(我的线索之一是匹配参数等待“大括号”,所以我不得不添加到那里,但我在互联网上的任何地方都没有看到这样使用它。)
最佳答案
从各个节点获取key,统一起来,就可以得到一个集群的所有key。
getClusterNodes()
方法会派上用场,它返回所有集群节点的映射。
这是一个使用 SCAN
的实现,类似于您的尝试:
public void testRedis() {
ScanParams scanParams = new ScanParams().count(1000);
Set<String> allKeys = new HashSet<>();
getRedisCluster().getClusterNodes().values().forEach((pool) -> {
String cur = ScanParams.SCAN_POINTER_START;
do {
try (Jedis jedis = pool.getResource()) {
ScanResult<String> scanResult = jedis.scan(cur, scanParams);
allKeys.addAll(scanResult.getResult());
cur = scanResult.getStringCursor();
}
} while (!cur.equals(ScanParams.SCAN_POINTER_START));
});
allKeys.stream().forEach(System.out::println);
}
更新:您可以检查条件以在获得至少 1000 个 key 后立即停止迭代。
public void testRedis() {
ScanParams scanParams = new ScanParams().count(1000);
Set<String> allKeys = new HashSet<>();
for (JedisPool pool : getRedisCluster().getClusterNodes().values()) {
String cur = ScanParams.SCAN_POINTER_START;
do {
try (Jedis jedis = pool.getResource()) {
ScanResult<String> scanResult = jedis.scan(cur, scanParams);
allKeys.addAll(scanResult.getResult());
cur = scanResult.getStringCursor();
}
if (allKeys.size() >= 1000) break;
} while (!cur.equals(ScanParams.SCAN_POINTER_START));
if (allKeys.size() >= 1000) break;
}
allKeys.stream().forEach(System.out::println);
}
关于java - Jedis 扫描未找到任何 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50017507/
我有一个 tomcat 服务器并使用 jedis 客户端连接到它。 我使用的jedis版本是“3.0.0-m1”,tomcat 8.0.15 连接后几个小时后,我看到以下异常。有什么帮助吗? redi
我正在使用 Jedis 连接到 Redis 并将数据推送到列表中。我正在为 JSON 数据使用 rpush。 这些是我执行的步骤: 从 Rabbitmq 获取数据 从 JSON 数据中收集信息并准备一
我正在尝试在 vim 中使用 python-jedi,但目前它完全无法使用,因为它试图在奇怪的时间完成代码。 我添加了以下行: let g:jedi#popup_on_dot = 0 到我的 vim
我正在使用 jedi-vim,输入以下内容后,出现“未找到模式”错误: import numpy numpy. 但是,如果我运行以下 python 脚本,我会得到一长串完成列表: import jed
以下 Java 代码将一百万对整数插入到 Redis 中。 public class JedisInsertion { public static byte[] fromInt(in
我在几个线程中看到了答案,但没有解决我的问题,因为我的问题偶尔会出现,如果有人有任何想法,请问这个问题。 我使用的是jedis 2.8.0版本,Spring Data redis 1.7.5版本。和用
我的 Storm 类使用 Redis 队列来收集数据。 我尝试运行我的 Storm jar storm jar jar_file_name.jar Topology_name configuratio
我通过 jedis 在 java 上有这段代码: int shb1 = jds.storeHypnoBeats(id1, arr1); 调用这个函数: int storeHypnoBeats(Stri
我是 jedi-vim 的新手,我不知道如何跳转其他文件中的函数定义。 jedi-vim 's doc是: 以下是其中的一部分: NOTE: subject to change! let g:jedi
我刚刚注意到,每当我对任何 Delphi 2010 项目进行增量编译 (ctrl-F9) 时,我的项目中引用的所有 JEDI 单元都会重新编译,尽管它们没有以任何方式进行更改。事实上,如果我创建一个新
我正在使用 Jedi usb hid 组件连接 HID 设备并对其进行读取和写入。我无法写入设备。我一直在使用这个代码。 type TReport = Packed record ReportID:
我正在使用 Jedis,我无法直接连接到 Redis,我必须使用代理。我可以使用 socks 代理通过 Jedis 连接到 Redis 吗? 请你帮帮我。 问候。 最佳答案 我一直在寻找解决方案,但找
我在 vim 中通过 YCM 使用 jedi,在我的项目中看到一些奇怪的行为,关于在 jediHttp 服务器上使用 usages 端点。基本上它只能找到我项目中类或函数的一小部分用法。它确实找到了当
我正在尝试连接到我的虚拟机 Redis package nosql; import redis.clients.jedis.Jedis; public class NoSQL { public sta
我在我用作生产者/消费者队列的 Redis 队列之上使用 Java 库 Jedis。它易于设置并且运行良好。 消费者代码如下 List messages = jedis.blpop(0, redisQ
什么是jedis事务执行成功响应? jedis 似乎会返回 1 作为成功响应。如果交易包括两个操作,我的以下代码是否有效? List ret = jedisAdapter.exec(tx, jedi
我在看jedis源码的时候发现 connection = connectionHandler.getConnectionFromSlot(JedisClusterCRC16.getSlot(key))
我在 jedis 客户端的帮助下使用 redis。在此处附加键值设置/获取的代码片段。在这里,我希望我的 jedisPool 只被初始化一次,但它被初始化了多次。不知道我哪里错了。用它挠我的头几天。我
当我像下面的代码一样使用 jedis 时: public class JedisTest extends Sync { private static final String _SET_KEY
我最近不得不使用 Jedis 库,它是一个很棒的库。我知道 Redis 是用 C 编写的,Jedis 只是将 Java 包装在 C 周围吗?光看Jedis源码是想不通的。谁能解释一下? 最佳答案 Je
我是一名优秀的程序员,十分优秀!