Нужно быстрее хранить информацию о пользователях в Redis, какие правильные команды использовать? (Для повышения производительности)

Мне нужно хранить информацию о пользователях, и я ищу правильный способ сделать это!

Зная, что это информация для хранения:

- Addresses
- Full Name
- Phone number
- Location

Эта информация может быть изменена пользователем по запросу из HTML-формы.

Что мне нужно ?

Правильный способ хранить эту информацию на сервере Redis и обновлять ее быстрее!

Что я пробовал?

1- Сначала я храню всю информацию внутри массива JSON

2- Сохраните массив JSON с помощью этой команды (SET):

$redis->set('user:8:infos', json_encode($infos));  
// And set expiration ...

Обновление информации

И затем, чтобы обновить информацию: 1- Сначала получите ключ:

$infos = $redis->get('user:8:infos');

2- Десериализовать массив JSON

3- Измените правильный ключ и значение массива JSON.

4- Сериализация массива JSON

5- снова обновите его в Redis с помощью команды SET, как будто мы вставляем его в первый раз.

Вы можете видеть, что нужно выполнить много операций, чтобы обновить одну информацию о пользователе, и это требует много ресурсов с сервера, особенно если у нас большой трафик.

Мне нужен правильный способ (быстрее и для повышения производительности) для управления информацией о пользователях и управления ими внутри сервера Redis.

Я где-то читал на официальном сайте Redis, что «Отсортированные наборы» быстрее других?

Ваш ответ будет оценен, спасибо заранее.


person Cliff Anger    schedule 24.07.2019    source источник


Ответы (1)


Если ваша информация о пользователе проста, например. нет вложенной структуры, лучший и быстрый способ сохранить информацию о пользователе — это Redis HASH:

// SET
HSET user1 address XXX
HSET user1 full-name XXX
HSET user1 phone-number XXX
HSET user1 location XXX

// GET single field
HGET user1 address

// UPDATE single field
HSET user1 full-name YYY

Однако, если ваша информация о пользователе сложна и имеет вложенную структуру, например. {"addr" : "xxx", "location" : {"широта" : 12,3, "долгота" : "23,4"}} вы можете использовать RedisJSON или redis-protobuf для сохранения информации о пользователе. Так что вы можете получить или обновить одно поле с большей производительностью.

person for_stack    schedule 24.07.2019
comment
Привет, спасибо за ваш ответ, сэр! Есть ли способ сохранить всю информацию, используя только одну команду? Вместо того, чтобы использовать 4 вызова Redis? Для RedisJSON это быстрее, чем HSET/HGET, или медленнее при обновлении данных, особенно если я хочу обновить один ключ? Спасибо еще раз. - person Cliff Anger; 25.07.2019
comment
Как насчет использования ZADD для информации, содержащей DECIMAL? HSET против ZADD, кто быстрее? (ZADD user:8 9955644221 phone-number) - person Cliff Anger; 25.07.2019
comment
@CliffAnger 1. Вы можете использовать команду HMSET, чтобы установить всю информацию о пользователе в HASH. 2. Вы должны сделать тест, чтобы проверить, какой из них быстрее. 3. ИМХО, в вашем случае лучше HASH, также по идее HSET должен быть быстрее, чем ZADD. Так как с ZADD нужно обновить 2 индекса, а HSET только обновить 1 индекс. - person for_stack; 25.07.2019
comment
Спасибо, сэр :) оценил. - person Cliff Anger; 25.07.2019