Maison  >  Article  >  base de données  >  Comment obtenir toutes les clés dans Redis

Comment obtenir toutes les clés dans Redis

PHPz
PHPzavant
2023-05-28 15:40:213493parcourir

keys : clés de parcours complètes, utilisées pour répertorier toutes les clés qui répondent à des règles de chaîne régulières spécifiques. En supposant que redis se trouve actuellement dans un environnement de production, l'utilisation de cette commande entraînera des dangers cachés lorsque la quantité de données redis est relativement importante :

keys renvoie toutes les clés qualifiées en même temps, ce qui entraînera un décalage Redis.

L'itérateur SCAN est basé sur le curseur et le dernier curseur doit être utilisé pour continuer le processus d'itération précédent. En utilisant le curseur 0 comme point de départ, effectuez une nouvelle opération de parcours et continuez l'itération jusqu'à ce que la commande revienne au curseur 0 pour terminer le parcours complet.

Cette commande ne garantit pas que chaque exécution renverra un nombre donné d'éléments, et peut même renvoyer 0 élément. Cependant, tant que le curseur n'est pas 0, le programme ne pensera pas que la commande SCAN est terminée, mais la commande SCAN. le nombre d’éléments renvoyés correspondra très probablement au paramètre count. De plus, SCAN prend en charge les requêtes floues.

1.keys paquet cmos-cache

redisCacheService.keys(String pattern);

2.méthode de scan

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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer