Redis-scanningsmatch understøtter kun glob-stilmatch. Den kan ikke matche regex. For at nå dit mål har du to muligheder:
- Scan alle nøgler, og foretag matchning på klientsiden.
- Brug Lua-script til at scanne og matche. Du kan prøve følgende one-liner som et eksempel:
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:[^:]*'
Denne one-liner returnerer resultater nøjagtigt som den indbyggede scanningskommando. Jeg er ikke Lua-ekspert, og koden er ikke fuldt testet.
Luas matching er heller IKKE regex-matching, selvom det kan løse de fleste problemer. Du skal tage Luas reference for at tjekke, om den matcher din sag.