Heim  >  Artikel  >  Datenbank  >  So erhalten Sie alle Schlüssel in Redis

So erhalten Sie alle Schlüssel in Redis

PHPz
PHPznach vorne
2023-05-28 15:40:213495Durchsuche

keys: Vollständige Traverse-Schlüssel, die zum Auflisten aller Schlüssel verwendet werden, die bestimmte reguläre Zeichenfolgenregeln erfüllen. Unter der Annahme, dass sich Redis zu diesem Zeitpunkt in einer Produktionsumgebung befindet, führt die Verwendung dieses Befehls zu versteckten Gefahren:

keys gibt alle qualifizierten Schlüssel auf einmal zurück, sodass es zu Redis-Verzögerungen kommt.

Der SCAN-Iterator basiert auf dem Cursor, und der letzte Cursor muss verwendet werden, um den vorherigen Iterationsprozess fortzusetzen. Führen Sie unter Verwendung von Cursor 0 als Ausgangspunkt eine neue Durchlaufoperation durch und setzen Sie die Iteration fort, bis der Befehl zu Cursor 0 zurückkehrt, um den gesamten Durchlauf abzuschließen.

Dieser Befehl garantiert nicht, dass jede Ausführung eine bestimmte Anzahl von Elementen zurückgibt, und kann sogar 0 Elemente zurückgeben. Solange der Cursor jedoch nicht 0 ist, geht das Programm nicht davon aus, dass der SCAN-Befehl beendet wurde, sondern dass Die Anzahl der zurückgegebenen Elemente wird höchstwahrscheinlich mit dem Zählparameter übereinstimmen. Darüber hinaus unterstützt SCAN Fuzzy-Abfragen.

1.keys CMOS-Cache-Paket

redisCacheService.keys(String pattern);

2.Scan-Methode

public static Set<String> getAllKey(String match,int count){
    //返回集
    Set<String> binKeys = new HashSet<>();
    //封装scan查询参数
    ScanParams param = new ScanParams().match(match).count(count);
    //获取查询对象
    RedisCacheServiceImpl redisCacheSer = (RedisCacheServiceImpl)RedisCacheService;
    JedisCluster jedisClu = redisCacheSer.getJedisCluster();
//getClueterNodes获取集群节点,从各个集群中获取值进行遍历
    jedisClu.getClusterNodes().values().stream().forEach(pool->{
        boolean done = false;//
        String cur = "0";//游标,以0开始,返回0代表一次结束
        try(Jedis jedisNode = pool.getResource()){
            while(!done){
                ScanResult<String> scanResult = jedisNode.scan(cur,param);
                cur = scanResult.getStringCursor();
                if("0".equals(cur){done=true};
                List<String> result = scanResult.getResult();
                result.foreach(data->{binKeys.add(data)});
            }
        }
    });
    return binKeys;
}

Das obige ist der detaillierte Inhalt vonSo erhalten Sie alle Schlüssel in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen