redis扫描匹配

mmvthczy  于 2021-06-07  发布在  Redis
关注(0)|答案(1)|浏览(709)

如果我的redis中有以下密钥:

Person:1234
Person:1234:email
Person:name:John
Person:lastName:Doe

我只想 MATCH 第一个键使用 SCAN .
我试过了 Person:* ,但这当然会返回所有的结果。 Person:[^:]* 或者类似的尝试都没有成功,我尝试着匹配除 : .
有人能给我指出正确的方向吗?

oxalkeyp

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的证明来检查它是否符合你的情况。

相关问题