如果我的redis中有以下密钥:
Person:1234 Person:1234:email Person:name:John Person:lastName:Doe
我只想 MATCH 第一个键使用 SCAN .我试过了 Person:* ,但这当然会返回所有的结果。 Person:[^:]* 或者类似的尝试都没有成功,我尝试着匹配除 : .有人能给我指出正确的方向吗?
MATCH
SCAN
Person:*
Person:[^:]*
:
oxalkeyp1#
redis scan match只支持glob样式匹配。它不能进行正则表达式匹配。为了实现你的目标,你有两个选择:扫描所有密钥并在客户端进行匹配。使用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:[^:]*'
这一行程序返回的结果与内置的scan命令完全相同。我不是luaMaven,代码也没有经过充分测试。而且,lua的匹配不是regex匹配,尽管它可以解决大多数问题。你需要拿lua的证明来检查它是否符合你的情况。
1条答案
按热度按时间oxalkeyp1#
redis scan match只支持glob样式匹配。它不能进行正则表达式匹配。为了实现你的目标,你有两个选择:
扫描所有密钥并在客户端进行匹配。
使用lua脚本进行扫描和匹配。您可以尝试以下一行作为示例:
这一行程序返回的结果与内置的scan命令完全相同。我不是luaMaven,代码也没有经过充分测试。
而且,lua的匹配不是regex匹配,尽管它可以解决大多数问题。你需要拿lua的证明来检查它是否符合你的情况。