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;
}
});
}
Copier après la connexion
@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());
}
}
Copier après la connexion
/** * 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()); } }