Несколько конвейерных HGETALL против MGET, затем синтаксический анализ JSON для каждого объекта. - PullRequest
1 голос
/ 10 декабря 2011

Я храню информацию о пользователе из приложения nodejs в виде

SET user_<userid> {id:"asdad", .....}

У меня есть наборы пользователей, организованные обновлениями и тому подобное. Иногда мне нужно получить большое количество пользователей и отправить их клиенту (скажем, 100 пользователей)

В настоящее время я использую MGET key1, key2, ...., затем, как только я их получаю, я анализирую json и возвращаю результат.

Будет ли лучше хранить пользователей в хешах? Чтобы получить несколько пользователей, я мог бы использовать multi вместе с HMGET, чтобы я использовал 100 HMGET, а затем возвращал пользовательские данные.

Большое преимущество, которое я вижу для HMGET, состоит в том, что если мне нужны только некоторые из моих пользовательских полей, я могу получить частичные объекты вместо полных объектов.

Ответы [ 2 ]

4 голосов
/ 10 декабря 2011

Определенно было бы лучше использовать хеш для хранения ваших пользователей, но не разделяя их значения на различные поля хеша.Используйте хеш, как собственное хранилище значений ключей.

HMSET users <userid> {"your":"json"}

Это намного более эффективно использует память, чем использование ключа верхнего уровня для каждого пользователя, так как Redis не должен сохранять метаданные (например, expire) дляключи.У вас все еще есть поддержка HMGET / SET и некоторых других.

Подробности можно найти по адресу: http://redis.io/topics/memory-optimization

Относительно вашего вопроса и вопроса я не смог найти тесты, поэтому вам придется тестироватьпроизводительность для себя.Тем не менее, использование MULTI доставит вам неприятности, когда вам придется разделять данные в двух экземплярах redis.MULTI команды в настоящее время не могут охватывать несколько экземпляров.

1 голос
/ 10 декабря 2011

Было бы лучше для меня хранить пользователей в хешах?

Хранение пользователей в хешах дает вам большую гибкость в плане извлечения только определенных полей, как вы упомянули, а также нет необходимостиразбирать строки на объекты.Я задавал похожий вопрос раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...