Я не думаю, что вы можете сохранить всех авторов таким образом. Это связано с тем, что хэш может хранить только одно значение для каждого ключа. Таким образом, name
и created_at
не могут быть ключами, поскольку всем авторам необходимо хранить свои собственные значения для этих ключей, но вы можете использовать каждый ключ только один раз.
Если вы используете Ruby on Rails, предпочтительнее использовать Rails.cache
- таким образом вам не нужно беспокоиться о том, как Rails хранит объект в Redis.
Однако, если вы хотите по какой-то причине использовать hmset
, я считаю, что лучшее, что вы можете сделать, это что-то вроде этого:
authors = Author.all.flat_map { |author| [author.id.to_s, author.attributes.to_json] }
$redis.hmset("authors", *authors_data)
Первая строка вернет что-то вроде этого:
['1', '{"name": "Mary Jones", "email": "m@example.com"}', '2', '{"name": "Another name", "email": "e@example.com"']
Команда
hmset
принимает не массив, а плоский список атрибутов, поэтому во 2-й строке необходимо передать *authors_data
в функцию.
Тогда внутренне это будет выглядеть так:
{
'1' => '{"name": "Mary Jones", "email": "m@example.com"}',
'2' => '{"name": "Another name", "email": "e@example.com"'
}
Позже вы можете сделать $redis.hmget("authors", '1')
, который вернет строку '{"name": "Mary Jones", "email": "m@example.com"}'