Вы используете тип хеша для хранения отдельной информации, и вы используете hgetall для ее получения, поэтому я предполагаю, что вы еще не знакомы с типами данных redis.Итак, сначала позвольте мне кратко объяснить три типа данных, о которых я буду говорить (все типы можно найти в документации здесь https://redis.io/topics/data-types-intro):
- Строка: простой тип ключ / значениеполучить к нему доступ с помощью
set(key, value)
и get(key, value)
- Хэш: набор ключей / значений, хранящихся под одним ключом повторного ввода.Полезно для хранения атрибутов объекта, например, вы можете иметь ключ userdata: userID и имя магазина, аватар, статус ... вместе с ним.Получите доступ к нему с помощью
hset(key, field, value)
, hget(key, field)
, hgetall(key)
- . Набор: представляет собой набор уникальных строк. Доступ к нему осуществляется с помощью
sadd(key, member)
, sismember(key, member)
, smembers(key)
*.1020 * Если вы собираетесь сохранить только онлайн-статус, было бы лучше использовать строковый тип с set, get и del (так как обычно большинство пользователей в автономном режиме большую часть времени, удалите их и сэкономьте место).Для этого простого ключа / значения использование redis на самом деле даже лучше, чем старый добрый memcache.
Если вы намереваетесь хранить больше пользовательских атрибутов (mood, девиз, аватар ...), вам следует переименовать его в userdata: userID "и проверьте с помощью hget("userdata:userID", "status")
и используйте hgetall
только для извлечения всех атрибутов.
Другим подходом может быть сохранение всех пользователей в наборе: sadd('users:online', userID)
и проверка с помощью sismember('users:online', userID)
или получение всех онлайн-пользователей с помощью smembers('users:online')
.Предположим, что вы храните всех друзей в другом наборе friends:userID
, вы можете захватить всех онлайн-друзей пользователя с помощью одной команды пересечения sinter('friends:userID', 'users:online')
- довольно мило и элегантно, ИМХО, но это сложно с более различными состояниями и не работает сredis-cluster.
Я бы предпочел подход SET.Несколько хетгов тоже подойдут, пока не возникнут проблемы из-за одного парня (он всегда один), который имеет тысячи контактов и постоянно обновляется.В этот момент вы все еще можете ввести некоторые ограничения дружбы или кеширования.