redis sismember检查多用户在线

时间:2016-05-30 14:09:50

标签: redis

我使用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} = {离线,在线,离线}

2 个答案:

答案 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

只需记住保持联系'更新......这是另一个故事

希望这会有所帮助。