Как найти пространство ключей в Redis с помощью клиента JEDISCLUSTER? - PullRequest
0 голосов
/ 05 октября 2018

Я храню карту в пространстве ключей в REDIS.Я сохранил несколько карт в нескольких пространствах ключей, как показано в коде.Теперь я хочу найти пространство клавиш, используя подстановочный знак.Возможно ли, если да, как это сделать?

package kafka;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.ScanParams;

public class Test {

public static void main(String[] args) {
    JedisCluster connection = JedisConnection.getInstance().getconnection();

    Map<String, String> ks = new HashMap<>();
    ks.put("one", "one");
    ks.put("two", "two");
    ks.put("four", "four");
    connection.hmset("parent_child1", ks);

    Map<String, String> ks1 = new HashMap<>();
    ks1.put("one", "one1");
    ks1.put("two", "two1");
    ks1.put("three", "three");
    connection.hmset("parent_child2", ks1);

    Map<String, String> ks2 = new HashMap<>();
    ks2.put("one", "one2");
    ks2.put("two", "two1");
    ks2.put("three", "three3");
    connection.hmset("parent_child3", ks2);

    Map<String, String> ks3 = new HashMap<>();
    ks3.put("one", "one3");
    ks3.put("two", "two3");
    ks3.put("three", "three3");
    connection.hmset("parent_child1", ks3);

    System.out.println(connection.hkeys("parent_child1"));
    //Output : [two, three, four, one]
    connection.hscan("parent_*", "0", new ScanParams().match("{parent_}"));
    connection.hscan("parent_*", "0");
    System.out.println(connection.hgetAll("parent_child1"));
    //Output: {two=two3, three=three3, four=four, one=one3}


}
}

Теперь я хочу найти пространство клавиш, используя parent _ *, чтобы оно давало мне все имена пространств клавиш, начинающиеся с parent_ то есть parent_child1, parent_child2, parent_child3.

1 Ответ

0 голосов
/ 18 октября 2018

Как упомянуто в этом JedisCluster: Сканирование для ключа не работает

Вам нужно пройтись по всем узлам и искать ключи, как показано ниже.

Set<byte[]> keys = new HashSet<>();
Map<String, JedisPool> nodes = connection.getClusterNodes();
for(String key : nodes.keySet()) {
  JedisPool jedisPool = nodes.get(key);
  Jedis jedis = jedisPool.getResource();
  keys.addAll(connection.keys("parent_*"));
  jedis.close();
}
...