Я разрабатываю веб-сайт, где использую REDIS для хранения списка пользователей. Это в отсортированном наборе, где счет — это просто время, когда они были внесены в список. Разбивать этот список на страницы очень легко. Проблемная часть приходит, когда я хочу показать из этого списка только онлайн-пользователей с нумерацией страниц при необходимости. У меня есть на каждую минуту набор, где я храню только идентификаторы пользователей, тех, кто был в сети.
Проблема, я не могу пересечь 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"
Других решений пока нет …