Лучший способ проверить, может ли Redis делать то, что вы хотите, - это установить его на компьютер разработчика и попробовать redis-cli
. У этого встроенного клиента есть команда завершения и доступна справка (просто нажмите help <TAB>
, чтобы увидеть категории), а также хорошая документация доступна на http://redis.io/commands
.
Что касается вашего запроса, вы должны изучить структуру данных sorted set
, чтобы сохранить информацию о пользователе. Это лучше, чем sets
в одиночку, поскольку * допускает базовую форму запросов, как вы увидите:
Предположим, вы хотите иметь возможность опрашивать всех пользователей в возрасте от 18 до 30 лет в вашей базе данных, которая содержит (в качестве примера) 3 пользователя: Джо, 28 лет; Боб, 17 лет; и Адам, 50 лет.
Вы бы заполнили Redis как:
ZADD age 28 Joe
ZADD age 17 Bob
ZADD age 50 Adam
Синтаксис ZADD [key] [score] [member]
. Набор находится в [key]
, и в отсортированных наборах каждый [member]
имеет [score]
, который ДОЛЖЕН БЫТЬ ДВОЙНЫМ . Это означает, что вы не можете запрашивать оценки, используя строковые шаблоны или даже строковые значения (в этом случае Mongo должен быть лучше).
Итак, время для запроса. Я буду вставлять redis-cli
запросов сейчас:
Чтобы просмотреть список всех пользователей в возрасте от 18 до 30 лет, вы должны сделать:
redis> ZRANGEBYSCORE age 18 30
1) "Joe"
redis> ZRANGEBYSCORE age 18 30 WITHSCORES
1) "Joe"
2) "28"
Опция WITHSCORES
показывает результат каждого участника в результате.
Чтобы отобразить всех пользователей в возрасте до 18 лет:
redis> ZRANGEBYSCORE age 0 (18
1) "Bob"
redis> ZRANGEBYSCORE age 0 (18 WITHSCORES
1) "Bob"
2) "17"
Модификатор (
позволяет открывать начальный или конечный интервал. Это было бы похоже на where age >=0 and age < 18
.
Для просмотра списка всех пользователей старше 30 лет:
redis> ZRANGEBYSCORE age 30 +inf
1) "Adam"
redis> ZRANGEBYSCORE age 30 +inf WITHSCORES
1) "Adam"
2) "50"
+inf
- это бесконечность, поэтому нет верхнего предела для результата, как where age >= 30
.
и т. Д.
Это действительно только начало. Вы можете выполнять пересечения, объединения и select count(*)
операции в отсортированных наборах, все очень быстро, особенно если вы используете оптимизированную библиотеку (например, phpredis ). Надеюсь, у вас сложилось хорошее впечатление.