Использование redis-rb, как я могу нажать хэш в список? Должен ли я использовать JSON для кодирования или поддерживается ли это? Если да, то как я могу это сделать? Я вижу только метод hset с ключами и парами ключ/значение.
Спасибо
Использование redis-rb, как я могу нажать хэш в список? Должен ли я использовать JSON для кодирования или поддерживается ли это? Если да, то как я могу это сделать? Я вижу только метод hset с ключами и парами ключ/значение.
Спасибо
Сохранение любого объекта (а не только хэша) в качестве кодированной строки JSON является одним из способов сделать это.
Если ваш вариант использования позволяет это, вы также можете хранить хеш-идентификаторы в списке и использовать SORT GET для получения дополнительных значений.
Пример:
r.hmset('person:1', 'name','adam','age','33')
r.hmset('person:2', 'name','eva','age','28')
r.lpush('occupants', 'person:1')
r.lpush('occupants', 'person:2')
r.sort('occupants', :get => ['*->name'])
Получить имена списков из хэшей, идентификаторы которых хранятся в списке occupants
. Вы можете получить несколько полей, но вы получите только массив.
Подробнее... команда SORT
Список Redis аналогичен Ruby Array. У него нет ключей.
Как обсуждалось в redis-rb documentation, если вы хотите сохранить объект Ruby в значении Redis, вам необходимо его сериализовать сначала используя, например, JSON:
Сохранение объектов
Redis сохраняет только значения в качестве значений. Если вы хотите сохранить объект внутри ключа, вы можете использовать механизм сериализации/десарализации, например JSON:
>> redis.set "foo", [1, 2, 3].to_json => OK >> JSON.parse(redis.get("foo")) => [1, 2, 3]
Другой вариант - сохранить его в качестве хэша Redis, как вы упомянули, используя, например, HMSET, но если ваша единственная цель - хранить и извлекать объект (а не выполнять операции Redis на нем), это лишнее.