Redis
 sql >> Base de données >  >> NoSQL >> Redis

Un moyen plus rapide d'itérer toutes les clés et valeurs dans redis db

Tout d'abord, le moyen le plus rapide est de faire tout cela dans EVAL.

Ensuite, l'approche recommandée pour itérer toutes les clés est SCAN. Il n'itèrerait pas plus vite que KEYS , mais permettra à Redis de traiter d'autres actions entre les deux, ce qui contribuera au comportement global de l'application.

Le script sera quelque chose comme 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 , mais cela échouera si vous avez des clés inaccessibles avec GET (comme des ensembles, des listes). Vous devez y ajouter la gestion des erreurs. Si vous avez besoin d'un tri, vous pouvez le faire soit directement dans LUA, soit plus tard côté client. La seconde sera plus lente, mais ne laissera pas attendre les autres utilisateurs de l'instance redis.

Exemple de sortie :

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"