如何申请' OR' redis keys命令

时间:2016-04-26 11:02:19

标签: regex redis

E.g。

keys X 'or' Y

应该打印

1)X<br>
2)Y

2 个答案:

答案 0 :(得分:0)

Redis仅将OR作为位操作。

例如:

redis>  SET key1 "foobar"

OK

redis>  SET key2 "abcdef"

OK

redis>  BITOP AND dest key1 key2

(integer) 6

redis>  GET dest

"`bc`ab"

您可以在http://redis.io/commands/bitop

上了解详情

答案 1 :(得分:0)

不,您不能直接使用KEYSSCAN,因为他们提供的模式匹配不支持。

但是,您可以使用Lua脚本来执行此操作:

local dict = {}

while (#ARGV > 0) do
    local pattern = table.remove(ARGV,1)
    local cursor = 0
    repeat
        local r = redis.call('SCAN',cursor,'MATCH',pattern)
        cursor = tonumber(r[1])
        while (#r[2] > 0) do
            dict[table.remove(r[2],1)] = true
        end
    until cursor == 0
end

local reply = {}
for k,v in pairs(dict) do
    reply[#reply+1] = k
    dict[k] = nil
end

return reply

示例输出:

$ redis-cli KEYS "*"
1) "bazfoo"
2) "bar2"
3) "foo1"
4) "qazbar"
$ redis-cli --eval scanor.lua , "foo*" "bar*"
1) "bar2"
2) "foo1"