Redis-rb нажатие хеша в список

Использование redis-rb, как я могу нажать хэш в список? Должен ли я использовать JSON для кодирования или поддерживается ли это? Если да, то как я могу это сделать? Я вижу только метод hset с ключами и парами ключ/значение.

Спасибо

Ответ 1

Сохранение любого объекта (а не только хэша) в качестве кодированной строки 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

Ответ 2

Список 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 на нем), это лишнее.