在REDIS中使用分页过滤在线用户


filter online user in REDIS with pagination

我正在开发一个网站,在那里我使用REDIS来存储用户列表。它是在一个排序的集合中,分数只是它们被放入列表的时间。浏览这个列表非常容易。有问题的部分出现了,当我想从这个列表中只显示带有分页的在线用户时(如果需要的话)。我每分钟都有一个SET,我只存储在线的用户ID。

问题是,我不能将SET和SORTED SET相交。所以我想的是,将在线用户集转换为一个没有分数的排序集,并在请求时使用INTERSECT,如果有人在同一分钟内在线,那不是问题,他们将在下一分钟内显示,我只需使用ZINTERSTORY命令。

有人有更好的主意吗?

好消息-您实际上可以在排序的规则集上使用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"