Maison > base de données > Redis > le corps du texte

Comment obtenir toutes les clés dans Redis

PHPz
Libérer: 2023-05-28 15:40:21
avant
3505 Les gens l'ont consulté

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);
Copier après la connexion

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;
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!