Назад | Перейти на главную страницу

Redis cluster RTT

В настоящее время мы используем 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) есть ли лучший способ реализовать это?

  1. HMGET должен работать в кластеризованном Redis, потому что он связан только с одним ключом. Каждый HMGET будет перенаправлен на узел, содержащий ключ
  2. /
  3. Не рекомендуется хранить каждого сериализованного пользователя в хэше, вы потеряете возможность запрашивать / inc / dec некоторые поля.

Предпочитаю:

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 а затем запросите каждого пользователя.

Примечание: кластеризация это не то же самое, что шардинг.