redisClusterでのぼかし取得key
3438 ワード
1つのクラスタでは、keys法によってpatternによってkeyの集合を直接取得することは明らかではない.このような問題に鑑みて、以下のような2つの考え方が生まれた.
シナリオ1:同じtagのKVが1つのノード上にあることが知られているので、keyが同じhashtagを持っている限り、1つのノード上にあるので、ノードをスキャンすれば、クラスタを単点に変換できます.
上記match方法では、括弧中のパラメータも上記のように記述することができる.
その鍵はkeyがredisにアップロードされることであり、命名方法には{}が含まれなければならない.
そして{}前、後ろにパラメータがあるかどうかは指定しなければならない.keyがZMC_の場合text: {zmc}:1
scanParams.match("{zmc}*");結果が出ない
シナリオ2:すべてのノードを取得し、各ノードをそれぞれスキャンし、patternに基づいてノードのkeyを取得し、統合すればよい.
注意:clusterモードでマルチキー操作を実行する場合、これらのキーは同じslot上にある必要があります.そうしないと、JedisDataException異常が報告されます.
宣言:この文書では、https://blog.csdn.net/u010416101/article/details/80754171 ;上手に書いてありますので、参考にしてみてください...
シナリオ1:同じtagのKVが1つのノード上にあることが知られているので、keyが同じhashtagを持っている限り、1つのノード上にあるので、ノードをスキャンすれば、クラスタを単点に変換できます.
@RequestMapping(value = "/ceshi", method = RequestMethod.GET)
@ResponseBody
public void Rediskeys() {
/**
*
* @param pattern key
* @param count , , redis 。
* @return key
*/
try{
jedisCluster.getClusterNodes();
ScanParams scanParams = new ScanParams();
scanParams.match("{operatingSystem}*");
scanParams.count(1000);
ScanResult result = jedisCluster.scan("0", scanParams);
List keyList = result.getResult();
System.out.println("keyList======="+keyList);
}finally{
}
}
//scanParams.match("*{zmc}*");//success
//scanParams.match("ZMC_text:{zmc}*");//success
上記match方法では、括弧中のパラメータも上記のように記述することができる.
その鍵はkeyがredisにアップロードされることであり、命名方法には{}が含まれなければならない.
そして{}前、後ろにパラメータがあるかどうかは指定しなければならない.keyがZMC_の場合text: {zmc}:1
scanParams.match("{zmc}*");結果が出ない
シナリオ2:すべてのノードを取得し、各ノードをそれぞれスキャンし、patternに基づいてノードのkeyを取得し、統合すればよい.
注意:clusterモードでマルチキー操作を実行する場合、これらのキーは同じslot上にある必要があります.そうしないと、JedisDataException異常が報告されます.
@RequestMapping(value = "/ceshi3", method = RequestMethod.GET)
@ResponseBody
public void RedisKeys() {
String redisKeyStartWith="Ad:ads:id:";
try {
Map clusterNodes = jedisCluster.getClusterNodes();
for (Map.Entry entry : clusterNodes.entrySet()) {
Jedis jedis = entry.getValue().getResource();
// ( , )
if (!jedis.info("replication").contains("role:slave")) {
Set keys = jedis.keys(redisKeyStartWith + "*");
if (keys.size() > 0) {
Map> map = new HashMap<>();
for (String key : keys) {
// cluster key , key slot , :JedisDataException:
// CROSSSLOT Keys in request don't hash to the same slot
int slot = JedisClusterCRC16.getSlot(key);
// slot key , slot key
if (map.containsKey(slot)) {
map.get(slot).add(key);
} else {
map.put(slot, Lists.newArrayList(key));
}
}
for (Map.Entry> integerListEntry : map.entrySet()) {
System.out.println("integerListEntry="+integerListEntry);
//jedis.del(integerListEntry.getValue().toArray(new String[integerListEntry.getValue().size()]));
}
}
}
}
logger.info("success redisKeys:{}", redisKeyStartWith);
} finally {
}
}
宣言:この文書では、https://blog.csdn.net/u010416101/article/details/80754171 ;上手に書いてありますので、参考にしてみてください...