Redisスキャン一致はglobスタイルの一致のみをサポートします。正規表現のマッチングはできません。目標を達成するには、次の2つのオプションがあります。
- すべてのキーをスキャンし、クライアント側で照合を行います。
- Luaスクリプトを使用してスキャンとマッチングを行います。例として、次のワンライナーを試すことができます。
redis-cli eval 'local res = redis.call("scan", ARGV[1]); local matches = {}; for i,v in ipairs(res[2]) do if v == string.match(v, ARGV[2]) then matches[#matches+1] = v end end res[2] = matches; return res' 0 cursor-starting-from-0 'Person:[^:]*'
このワンライナーは、組み込みのスキャンコマンドとまったく同じ結果を返します。私はLuaの専門家ではなく、コードは完全にはテストされていません。
また、Luaのマッチングは正規表現のマッチングではありませんが、ほとんどの問題を解決できます。 Luaの参照を使用して、ケースと一致するかどうかを確認する必要があります。