- FwdScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
- RevScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZREVRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
- Matcher =
"local itms = redis.call('SMEMBERS',KEYS[1])
local out = {}
local val
local pattern
for i, v in ipairs(itms) do
val = redis.call('HGET',v..'_h',ARGV[1])
if val then
if ARGV[2]:find('^pattern:') then
pattern = ARGV[2]:gsub('^pattern:','')
if val:match(pattern) ~= nil then
table.insert(out,itms[i])
end
else
if val == ARGV[2] then
table.insert(out,itms[i])
end
end
else
if ARGV[2] == '#{NilPattern}' then
table.insert(out,itms[i])
end
end
end
return out".gsub(/\t/,'').freeze
- MultiMatcher =
"local itms = redis.call('SMEMBERS',KEYS[1])
local out = {}
local matchers = {}
local matcher = {}
local mod
for i=1,#ARGV do
mod = i % 2
if mod == 1 then
matcher[1] = ARGV[i]
else
matcher[2] = ARGV[i]
table.insert(matchers,matcher)
matcher = {}
end
end
local val
local good
local pattern
for i, v in ipairs(itms) do
good = true
for n=1,#matchers do
val = redis.call('HGET',v..'_h',matchers[n][1])
if val then
if matchers[n][2]:find('^pattern:') then
pattern = matchers[n][2]:gsub('^pattern:','')
if val:match(pattern) then
good = good
else
good = false
end
else
if val ~= matchers[n][2] then
good = false
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = true
else
good = false
end
end
end
if good == true then
table.insert(out,itms[i])
end
end
return out".gsub(/\t/,'').freeze