当前位置: 首页 > 知识库问答 >
问题:

归还绝地武士所有匹配部分钥匙的钥匙

葛霄
2023-03-14

在Redis缓存中,我有三把钥匙

1111-2222-4444 1111-2222-3333 1112-2222-3333

我有一个部分键1111,我想返回两个键1111-2222-4444,1111-2222-3333

我有以下代码

public List<String> getKeys(String partialkey) {
        ScanParams scanParams = new ScanParams();
        scanParams.match("*");
        String cur = redis.clients.jedis.ScanParams.SCAN_POINTER_START;
        Jedis jedis = jedisPool.getResource();

        List<String> keys = new ArrayList<String>();
        boolean cycleIsFinished = false;
        while (!cycleIsFinished) {
            ScanResult<String> scanResult = jedis.scan(cur, scanParams);
            cur = scanResult.getCursor();
            for(String key :scanResult.getResult()) {
                if(isKey(key, partialkey) ) {
                    keys.add(key);
                }
            }
            if (cur.equals("0")) {
                cycleIsFinished = true;
            }
        }
        return keys;
    }

以及匹配部分密钥的方法

    private boolean isKey(String key, String match) {
        String[] fields = key.split("-");
        if(match.equals(fields[0])) {
            return true;
        }
        return false;
    }

现在这个工作,但它看起来很笨重,可能有成千上万的键,通过搜索。我的问题是,有没有一种纯粹的redis方法来做到这一点。其中它只返回部分键匹配的两个键。

共有1个答案

濮赤岩
2023-03-14

感谢shmosel

public List<String> getKeys(String partialkey) {
        ScanParams scanParams = new ScanParams();
        scanParams.match(partialkey+"-*");
        String cur = redis.clients.jedis.ScanParams.SCAN_POINTER_START;
        Jedis jedis = jedisPool.getResource();

        List<String> keys = new ArrayList<String>();
        boolean cycleIsFinished = false;
        while (!cycleIsFinished) {
            ScanResult<String> scanResult = jedis.scan(cur, scanParams);
            cur = scanResult.getCursor();
            for(String key :scanResult.getResult()) {
                //if(isKey(key, partialkey) ) {
                    keys.add(key);
                //}
            }
            if (cur.equals("0")) {
                cycleIsFinished = true;
            }
        }
        return keys;
    }
 类似资料:
  • 问题内容: 在Go中,有没有更简单/更巧妙的方法从地图中获取键的片段? 目前,我正在遍历地图并将键复制到一个切片: 问题答案: 例如, 为了在Go中高效运行,最小化内存分配非常重要。

  • 我正在研究使用Hibernate 4.1.9注释地图的不同方法 如果我想存储一个Map,其中键是实体值的属性,标记如下所示 请注意,上面的标记不会创建连接表,而是在运行时通过查询返回Map,因此Map是动态的,您不必在map中添加元素Java查询返回它们。 现在,我希望地图的内容反映应用程序添加到地图中的内容,而不是执行动态查询。 我想储存4种不同的地图 在这些情况下,键之间没有关系 我尝试了以下

  • Targets key To be discussed in order to avoid _Warning: potential malicious behavior - trust data has insufficient signatures for remote repository .dkr.ecr.us-east-1.amazonaws.com/app: valid signatur

  • Snapshot key To rotate the snapshot key: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app snapshot -r Enter passphrase for ne

  • 根据我的理解,使用JOhm和Jedis,可以在Redis中存储/检索java类对象。我有一个问题是,JOhm是否也将java对象保存在内存中,以便下次需要该对象(与key相关联)时,从内存返回该对象,而不是每次都从Redis读取该对象?

  • 我为数据可视化工具开发了一个插件。现在我想在它里面使用redis。当我在另一个项目(不在我的插件中)中尝试下面的redis代码时,效果很好。 但当我在插件中使用绝地武士时,我得到了由java引起的和错误。为了把我的插件安装到这个数据可视化工具上。我需要创建一个jar文件,我这样做了,它在不添加jedit部分的情况下运行良好。 我正在使用IntelliJ Idea,我创建了一个工件,并从顶部菜单中的