Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Maneira mais rápida de iterar todas as chaves e valores no redis db


Primeiro, a maneira mais rápida é fazer tudo isso dentro do EVAL.

Em seguida, a abordagem recomendada para iterar todas as chaves é SCAN. Não iteraria mais rápido que KEYS , mas permitirá que o Redis processe algumas outras ações intermediárias, portanto, ajudará no comportamento geral do aplicativo.

O script será algo como local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data , mas falhará se você tiver chaves inacessíveis com GET (como conjuntos, listas). Você precisa adicionar tratamento de erros a ele. Se você precisar de classificação, poderá fazê-lo diretamente no LUA ou posteriormente no lado do cliente. O segundo será mais lento, mas não deixará outros usuários da instância do redis esperarem.

Saída de amostra:
127.0.0.1:6370> eval "local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data" 0
1) 1) "a"
   2) "aval"
2) 1) "b"
   2) "bval"
3) 1) "c"
   2) "cval"
4) 1) "d"
   2) "dval"
5) 1) "e"
   2) "eval"
6) 1) "f"
   2) "fval"
7) 1) "g"
   2) "gval"
8) 1) "h"
   2) "hval"