我使用redis获取在线用户我只是想检查一些用户是否在线
首先将用户添加到在线
sadd online_users user_a
(整数)1
检查user_a是否在线
sismember online_users user_a
(整数)1
我的问题是如何检查多用户是否在线,如
添加soem用户
sadd online_users user_a
(整数)1
sadd online_users user_b
(整数)1
sadd online_users user_c
(整数)1
现在我想检查三个用户是否在线
sismember online_users {user_a,user_b,user_c}
我不知道这是否正确,但我想要多用户检查返回数据,如 {0,1,0} = {离线,在线,离线}
答案 0 :(得分:1)
您必须独立为每个用户致电SISMEMBER
。为了简化流程并提高效率,请考虑使用Lua脚本。例如:
~$ redis-cli SADD online_users user_a user_b user_c
(integer) 3
~$ redis-cli --eval sismmember.lua online_users , user_a user_b user_c foo
1) (integer) 1
2) (integer) 1
3) (integer) 1
4) (integer) 0
~$ cat sismmember.lua
local rep = {}
local ele = table.remove(ARGV,1)
while (ele) do
rep[#rep+1] = redis.call('SISMEMBER',KEYS[1],ele)
ele = table.remove(ARGV,1)
end
return rep
~$
答案 1 :(得分:1)
最好的方法是比较两组。
1 - 抓住您的联系人'在第一个redis集
SADD contacts:your_id user_1 user_2 user_3 user_4
2-制作另一组所有连接用户
SADD connected user_1 user_2 user_3 user_6 user_78
然后使用命令SINTER,它将为您提供这两组之间的交集,这意味着您连接的所有联系人
SINTER connected contacts:your_id
只需记住保持联系'更新......这是另一个故事
希望这会有所帮助。