В настоящее время мы используем Redis в качестве хранилища данных. Я создаю новый раздел, в котором нам нужно ранжировать и разбивать на страницы пользователей. Поэтому я думаю использовать Сортированный набор для сохранения ранга и идентификатора пользователя. И Hash для хранения данных профиля пользователя. Мой коллега обратил внимание на то, что нам нужно будет сделать много запросов на redis, чтобы получить данные профиля пользователей с помощью HGET. так что время в оба конца будет проблемой. Я планировал использовать HMGET, но после некоторого исследования я обнаружил, что это может вызвать проблемы, когда Redis кластеризован, потому что ключи хранятся в разных узлах Redis. Я использую phpredis, у него есть сегментирование на стороне клиента (мне сложно понять, что это такое).
я думал сделать вот так:
ранг
zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3
Профиль пользователя
hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"
1) Будет ли HMGET нормально работать в кластеризованном Redis?
2) если нет, что я могу сделать?
3) есть ли лучший способ реализовать это?
Предпочитаю:
hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb
Ваша схема ранжирования в порядке. Для поиска и разбиения на страницы между пользователями с самым высоким рейтингом просто выполните ZREVRANGEBYSCORE а затем запросите каждого пользователя.
Примечание: кластеризация это не то же самое, что шардинг.