まず、最速の方法は、EVAL内でこれらすべてを実行することです。
次に、すべてのキーを反復するための推奨されるアプローチはSCANです。 KEYS
よりも速く繰り返されることはありません 、ただし、Redisがその間に他のアクションを処理できるようにするため、アプリケーション全体の動作に役立ちます。
スクリプトは、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
、ただし、GETでアクセスできないキー(セット、リストなど)がある場合は失敗します。エラー処理を追加する必要があります。並べ替えが必要な場合は、LUAで直接行うことも、後でクライアント側で行うこともできます。 2つ目は遅くなりますが、redisインスタンスの他のユーザーを待たせることはありません。
サンプル出力:
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"