Maison  >  Article  >  base de données  >  Parlons de l'opération d'analyse de Redis

Parlons de l'opération d'analyse de Redis

藏色散人
藏色散人avant
2021-09-11 17:00:512723parcourir
série redis
  • fonction de publication et d'abonnement redis
  • file d'attente de messages redis
  • pipeline redis
  • opération d'analyse redis

séquence

Il y a un grand nombre de clés ou de clés dans le redis db S'il y a beaucoup d'éléments dans un ensemble, un zset ou un hachage dans la base de données, l'utilisation de l'opération get all ordinaire est susceptible de provoquer le blocage de redis en raison de cette opération, ce qui entraînera l'incapacité de répondre à d'autres opérations, surtout dans le contexte d'une concurrence élevée et de données massives, ce problème semble particulièrement grave. Alors, peut-il avoir une fonction de pagination comme une base de données ? La réponse est l’opération d’analyse. Cet article montre principalement comment l'utiliser dans redis-cli et SpringDataRedis. [Recommandé : Tutoriel vidéo Redis]

syntaxe d'analyse

Après la numérisation, deux parties sont renvoyées. La première partie correspond aux paramètres de l'analyse suivante et la deuxième partie correspond aux éléments de l'analyse

Objets d'action (db). , set, zset, hash )

  • db(key)key)
127.0.0.1:6379> scan 0
1) "120"
2)  1) "articleMap:63"
    2) "articleMap:37"
    3) "counter:__rand_int__"
    4) "articleMap:60"
    5) "tagSet:tag5"
    6) "articleMap:80"
    7) "messageCache~keys"
    8) "mymap"
    9) "articleMap:46"
   10) "articleMap:55"
127.0.0.1:6379> scan 120
1) "28"
2)  1) "articleMap:17"
    2) "tagSet:tag1"
    3) "articleMap:18"
    4) "articleMap:81"
    5) "\xac\xed\x00\x05t\x00\btest-cas"
    6) "articleMap:51"
    7) "articleMap:94"
    8) "articleMap:26"
    9) "articleMap:71"
   10) "user-abcde"
  • set(value)
127.0.0.1:6379> sscan myset 0
1) "3"
2)  1) "m"
    2) "j"
    3) "c"
    4) "h"
    5) "f"
    6) "i"
    7) "a"
    8) "g"
    9) "n"
   10) "e"
   11) "b"
127.0.0.1:6379> sscan myset 3
1) "0"
2) 1) "l"
   2) "k"
   3) "d"
  • zset(value & score)
127.0.0.1:6379> zscan sortset 0
1) "0"
2) 1) "tom"
   2) "89"
   3) "jim"
   4) "90"
   5) "david"
   6) "100"
  • hash(key & value)
127.0.0.1:6379> hscan mymap 0
1) "0"
2)  1) "name"
    2) "codecraft"
    3) "email"
    4) "pt@g.cn"
    5) "age"
    6) "20"
    7) "desc"
    8) "hello"
    9) "sex"
   10) "male"

SCAN的额外参数

  • count(指定每次取多少条)
127.0.0.1:6379> scan 0 count 5
1) "240"
2) 1) "articleMap:63"
   2) "articleMap:37"
   3) "counter:__rand_int__"
   4) "articleMap:60"
   5) "tagSet:tag5"
  • match(匹配key
127.0.0.1:6379> scan 0 match article*
1) "120"
2) 1) "articleMap:63"
   2) "articleMap:37"
   3) "articleMap:60"
   4) "articleMap:80"
   5) "articleMap:46"
   6) "articleMap:55"

set(value)

@Test
    public void scanDbKeys(){
        template.execute(new RedisCallback<Iterable<byte[]>>() {
            @Override
            public Iterable<byte[]> doInRedis(RedisConnection connection) throws DataAccessException {

                List<byte[]> binaryKeys = new ArrayList<byte[]>();

                Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().count(5).build());
                while (cursor.hasNext()) {
                    byte[] key = cursor.next();
                    binaryKeys.add(key);
                    System.out.println(new String(key, StandardCharsets.UTF_8));
                }

                try {
                    cursor.close();
                } catch (IOException e) {
                    // do something meaningful
                }

                return binaryKeys;
            }
        });
    }

zset(value & score )

/**
     * sadd myset a b c d e f g h i j k l m n
     */
    @Test
    public void scanSet(){
        Cursor<String> cursor = template.opsForSet().scan("myset",ScanOptions.NONE);
        while (cursor.hasNext()){
            System.out.println(cursor.next());
        }
    }

hash(key & value)

/**
     * zadd sortset 89 tom 90 jim 100 david
     */
    @Test
    public void scanZSet(){
        Cursor<ZSetOperations.TypedTuple<String>> cursor = template.opsForZSet().scan("sortset",ScanOptions.NONE);
        while (cursor.hasNext()){
            ZSetOperations.TypedTuple<String> item = cursor.next();
            System.out.println(item.getValue() + ":" + item.getScore());
        }
    }
🎜Paramètres supplémentaires de SCAN🎜🎜🎜count(Spécifiez le nombre d'éléments à prendre à chaque fois)🎜🎜
/**
     *  hset mymap name "codecraft"
     *  hset mymap email "pt@g.cn"
     *  hset mymap age 20
     *  hset mymap desc "hello"
     *  hset mymap sex "male"
     */
    @Test
    public void scanHash(){
        Cursor<Map.Entry<Object, Object>> curosr = template.opsForHash().scan("mymap", ScanOptions.NONE);
        while(curosr.hasNext()){
            Map.Entry<Object, Object> entry = curosr.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }
🎜🎜match (Match key)🎜🎜rrreee🎜Opération RedisTemplate🎜🎜Clé de base de données Traverse🎜rrreee🎜Traverse set🎜rrreee🎜Traverse zset🎜rrreee🎜Traverse hash🎜rrreee 🎜

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