- FwdScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)
local keys = redis.call('ZRANGE', KEYS[1], 0, KEYS[4])
redis.call('DEL', KEYS[1])
return keys".freeze
- RevScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)
local keys = redis.call('ZREVRANGE', KEYS[1], 0, KEYS[4])
redis.call('DEL', KEYS[1])
return keys".freeze
- ColMatcher =
"
local out = {}
local val
local pattern
for i, v in ipairs(KEYS) do
val = redis.call('HGET',v,ARGV[1])
if val then
if ARGV[2]:find('^pattern:') then
pattern = ARGV[2]:gsub('^pattern:','')
if val:match(pattern) then
table.insert(out,KEYS[i])
end
elseif ARGV[2]:find('^ipattern:') then
pattern = ARGV[2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
table.insert(out,KEYS[i])
end
else
if val == ARGV[2] then
table.insert(out,KEYS[i])
end
end
else
if ARGV[2] == '#{NilPattern}' then
table.insert(out,KEYS[i])
end
end
end
return out".gsub(/\t/,'').freeze
- ColMultiMatcher =
"
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(KEYS) do
good = true
for n=1,#matchers do
val = redis.call('HGET',v,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
break
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = good
else
good = false
break
end
else
if val ~= matchers[n][2] then
good = false
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
else
good = false
break
end
end
end
if good == true then
table.insert(out,KEYS[i])
end
end
return out".gsub(/\t/,'').freeze
- ColOrMatcher =
"
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(KEYS) do
good = false
for n=1,#matchers do
val = redis.call('HGET',v,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 = true
break
else
good = good
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = true
break
else
good = good
end
else
if val == matchers[n][2] then
good = true
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
break
else
good = false
end
end
end
if good == true then
table.insert(out,KEYS[i])
end
end
return out".gsub(/\t/,'').freeze
- KeyListFor =
GetKeyList + "
return itms
".gsub(/\t/,'').freeze
- Matcher =
GetKeyList + "
local out = {}
local val
local pattern
for i, v in ipairs(itms) do
val = redis.call('HGET',v,ARGV[1])
if val then
if ARGV[2]:find('^pattern:') then
pattern = ARGV[2]:gsub('^pattern:','')
if val:match(pattern) then
table.insert(out,itms[i])
end
elseif ARGV[2]:find('^ipattern:') then
pattern = ARGV[2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) 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 =
GetKeyList + "
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,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
break
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = good
else
good = false
break
end
else
if val ~= matchers[n][2] then
good = false
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
else
good = false
break
end
end
end
if good == true then
table.insert(out,itms[i])
end
end
return out".gsub(/\t/,'').freeze
- OrMatcher =
GetKeyList + "
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 = false
for n=1,#matchers do
val = redis.call('HGET',v,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 = true
break
else
good = good
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = true
break
else
good = good
end
else
if val == matchers[n][2] then
good = true
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
break
else
good = false
end
end
end
if good == true then
table.insert(out,itms[i])
end
end
return out".gsub(/\t/,'').freeze
- FirstMatcher =
GetKeyList + "
local val
local pattern
for i, v in ipairs(itms) do
val = redis.call('HGET',v,ARGV[1])
if val then
if ARGV[2]:find('^pattern:') then
pattern = ARGV[2]:gsub('^pattern:','')
if val:match(pattern) then
return itms[i]
end
elseif ARGV[2]:find('^ipattern:') then
pattern = ARGV[2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
return itms[i]
end
else
if val == ARGV[2] then
return itms[i]
end
end
else
if ARGV[2] == '#{NilPattern}' then
return itms[i]
end
end
end
return ''".gsub(/\t/,'').freeze
- FirstMultiMatcher =
GetKeyList + "
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,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
break
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = good
else
good = false
break
end
else
if val ~= matchers[n][2] then
good = false
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
else
good = false
break
end
end
end
if good == true then
return itms[i]
end
end
return ''".gsub(/\t/,'').freeze
- FirstOrMatcher =
GetKeyList + "
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 = false
for n=1,#matchers do
val = redis.call('HGET',v,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 = true
break
else
good = good
end
elseif matchers[n][2]:find('^ipattern:') then
pattern = matchers[n][2]:gsub('^ipattern:',''):lower()
if val:lower():match(pattern) then
good = true
break
else
good = good
end
else
if val == matchers[n][2] then
good = true
break
end
end
else
if matchers[n][2] == '#{NilPattern}' then
good = good
break
else
good = false
end
end
end
if good == true then
return itms[i]
end
end
return ''".gsub(/\t/,'').freeze