Как прилагате последната схема в Redis? Възможно ли е?
Redis е без схема . Нека наречем това, от което се нуждаете, подход за съхранение на данни .
Един възможен подход е използването на HSET
или HMSET
за да добавите тези JSON обекти по идентификатор, където техният идентификатор е ключ и JSON текстът е стойността . Ще наречем този хеш като users:byid
.
Това е първата част от проблема. Сега можете да получавате обекти по идентификатор .
Сега следващият проблем е, че искате да извлечете обекти в диапазон от това, което наричате класиране . За да получите това, трябва да съхранявате обектите си в сортиран набор с помощта на ZADD
. Сортираните набори са сортирани по резултат и елементите се съхраняват с оценка . Звучи идеално за вашия случай на употреба!
Всъщност ще съхраните идентификаторите на обекти в целия сортиран набор:
zadd users:byranking 10 1 5 2
... където 10
е резултатът (т.е. действителната ви стойност на класирането) и 1 id и така нататък.
И така, как филтрирате елементи по класиране? Използване на ZRANGEBYSCORE
:
- Чрез класиране между 0 и 10, с изключение на 10.
zrangebyscore users:byranking 0 (10
- Чрез класиране между 0 и 10, включително 10.
zrangebyscore users:byranking 0 10
Така нареченият ZRANGEBYSCORE
ще ви даде идентификаторите на извлечените потребители. Как получавате техния JSON текст? Използване на HMGET
:
HMGET users:byid 1 2
...което ще получи и двата потребителя с id 1
и 2
, ако 10
класирането е включващо.