Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mendapatkan semua kunci dalam redis

Bagaimana untuk mendapatkan semua kunci dalam redis

PHPz
PHPzke hadapan
2023-05-28 15:40:213489semak imbas

Kunci: Kunci lintasan penuh, digunakan untuk menyenaraikan semua kunci yang memenuhi peraturan rentetan biasa tertentu dengan mengandaikan bahawa redis berada dalam persekitaran pengeluaran pada masa ini, menggunakan arahan ini akan menyebabkan bahaya tersembunyi apabila jumlah data redis agak besar :

kunci akan mengembalikan semua kunci yang layak sekaligus, jadi ia akan menyebabkan redis tersekat.

Imbasan iterator adalah berdasarkan kursor, dan kursor terakhir perlu digunakan untuk meneruskan proses lelaran sebelumnya. Menggunakan kursor 0 sebagai titik permulaan, lakukan operasi traversal baharu dan teruskan lelaran sehingga arahan kembali ke kursor 0 untuk melengkapkan keseluruhan traversal.

Arahan ini tidak menjamin bahawa setiap pelaksanaan akan mengembalikan bilangan elemen tertentu, malah mungkin mengembalikan 0 elemen, tetapi selagi kursor bukan 0, program tidak akan menganggap perintah SCAN telah tamat , tetapi elemen yang dikembalikan Kuantiti berkemungkinan sepadan dengan parameter kiraan. Selain itu, SCAN menyokong pertanyaan kabur.

1.keys cmos-cache package

redisCacheService.keys(String pattern);

2.kaedah imbasan

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

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semua kunci dalam redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam