Получение хэш-данных redis

моя среда разработки — это PHP-фреймворк Laravel, использующий клиентскую библиотеку predis.

Я, вероятно, упускаю из виду некоторые аспекты, и я новичок в Redis, однако я думаю, что мне нужен тип хеш-данных для хранения информации о пользователе, например:

$redis->hmset('users', array('id' : 1, 'username' => 'ali', 'dob' => '29/06/89', 'email' => '[email protected]'));

Однако мой вопрос заключается в том, что вышеизложенное - это правильный способ хранения всех пользователей с информацией в ОДНОМ хеше, чтобы я мог извлекать всех пользователей вместе и при необходимости извлекать отдельного пользователя по идентификатору, поскольку мне нужно отображать всех пользователей в таблицу на внешнем интерфейсе, но также иногда необходимо захватить отдельного пользователя по его идентификатору.

Если нет, и мне нужно сохранить каждого пользователя в отдельном хэше, как показано ниже, с идентификатором как частью ключа, как мне получить всех пользователей за один раз и заказать?

$redis->hmset('users:{id}', array('name' => 'ali', 'dob' => '29/06/89', 'email' => '[email protected]'));

Большое спасибо за любую помощь.


person user969729    schedule 01.05.2015    source источник


Ответы (1)


Что я сделал, так это, как вы сказали, дать каждому пользователю идентификатор и сохранить их в формате users:{id}.

Затем вы захотите сохранить все идентификаторы пользователей в наборе или, возможно, в отсортированном наборе или списке, если для вас важен порядок, поэтому что-то вроде

$redis->sadd('users', {user's id});

Это псевдокод для хранения в наборе, потому что я не уверен в точном форматировании predis.

Затем, когда вы хотите получить всех пользователей, вы сначала делаете $redis->smembers('users'), чтобы получить все идентификаторы пользователей, а затем перебираете эти идентификаторы, чтобы получить все хэши пользователей.

person ErikAGriffin    schedule 01.05.2015
comment
Спасибо за ваш ответ, и когда я хочу перебрать всех пользователей и получить оттуда информацию, я получаю хэш всего пользователя с идентификаторами, а затем выполняю вызов на каждой итерации для получения информации о пользователях? Является ли вызов Redis для КАЖДОГО пользователя интенсивным? или тривиально с Redis. - person user969729; 01.05.2015
comment
Да, вы делаете вызов для каждого идентификатора пользователя, хранящегося в наборе. Я ни в коем случае не эксперт, но я считаю, что это абсолютно нормально для Redis. Дополнительную информацию можно найти в ответе здесь - person ErikAGriffin; 01.05.2015