Redis 的 Set 數據結構不支持直接的交集運算,但你可以通過執行一些額外的命令來實現這個功能
SMEMBERS set1
SMEMBERS set2
LINTERNSET
命令找到兩個列表的交集:LINTERNSET list1 list2
SMEMBERS intersection_set
LRANGE intersection_set 0 -1
這是一個簡單的例子,假設我們有兩個集合 set1
和 set2
,我們想要找到它們的交集并將結果存儲在 intersection_set
中:
SMEMBERS set1
SMEMBERS set2
LINTERNSET list1 list2
SMEMBERS intersection_set
如果你想要批量處理多個集合的交集,可以使用 Lua 腳本來實現更高效的操作。這是一個示例 Lua 腳本,用于計算兩個集合 key1
和 key2
的交集并將結果存儲在 destination_key
中:
local intersection_set = {}
local set1 = redis.call('SMEMBERS', KEYS[1])
local set2 = redis.call('SMEMBERS', KEYS[2])
for _, value in ipairs(set1) do
if redis.call('SREM', KEYS[2], value) then
table.insert(intersection_set, value)
end
end
return intersection_set
你可以使用 EVAL
命令執行此腳本:
EVAL script 2 set1 set2 destination_key
這將返回一個包含交集元素的列表。