一 背景
- redis的set结构,不支持批量查询集合是否在set中
- 循环查询会增加网络开销,速度不快,所以通过lua脚本方式批量查询。
二 lua脚本
lua/intersect.lua1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17local key = KEYS[1]
local skeys = cjson.decode(ARGV[1])
local size = #skeys
local result = {}
for i = 1, size do
local isMember = redis.call('sismember', key, skeys[i]);
if (tonumber(isMember) > 0) then
table.insert(result, skeys[i])
end
end
local resultSize = #result
if (resultSize == 0) then
return '[]'
else
return cjson.encode(result);
end
三 java相关代码
1 | ... |