我正在开发一个网站,我使用REDIS来存储用户列表。它位于一个有序集合中,其中得分就是将它们放入列表的时间。通过此列表进行分页非常容易。有问题的部分来了,当我想从这个列表中显示只有在必要时有分页的在线用户。我每分钟都有一个SET,我只存储用户ID,即在线的用户ID。
问题是,我无法将SET与SORTED SET相交。所以我的想法是将在线用户设置转换为没有得分的排序集,并在请求时使用INTERSECT,如果有人在同一分钟上线,那不是问题,它们将在下一个显示分钟,我只是使用ZINTERSTORY命令。
有人有更好的主意吗?
答案 0 :(得分:2)
好消息 - 您实际上可以在已排序的和常规集上使用ZINTERSTORE命令,例如:
127.0.0.1:6379> sadd s a b c
(integer) 3
127.0.0.1:6379> smembers s
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> zadd z 0 a 1 b 3 d
(integer) 3
127.0.0.1:6379> zrange z 0 -1
1) "a"
2) "b"
3) "d"
127.0.0.1:6379> zinterstore t 2 s z
(integer) 2
127.0.0.1:6379> zrange t 0 -1
1) "a"
2) "b"
127.0.0.1:6379> zinterstore tt 1 s
(integer) 3
127.0.0.1:6379> zrange tt 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "1"
5) "c"
6) "1"