Хранение свойств объекта в Redis

Допустим, у меня есть объект (пользователь), который состоит из нескольких свойств (идентификатор, имя, фамилия, возраст). Как лучше хранить этот объект в Redis?

  • хранить каждое значение свойства в выделенном ключе, например user:{id}:id, user:{id}:name, user:{id}:surename, user:{id}:age
  • хранить весь объект пользователя в виде строки JSON в одном ключе, например user:{id}:json (значение ключа будет примерно таким: {"ID": 123, "Name": "Johny", "Surename": «Браво», «Возраст»: 22})

person yojimbo87    schedule 09.03.2011    source источник


Ответы (3)


Согласно этим два источника, вероятно, оптимальным решением будет использование хэши из-за потребления памяти при использовании выделенных ключей и длинной строки в сценарии с JSON в качестве значения ключа.

person yojimbo87    schedule 09.03.2011
comment
Хм, кажется, есть много вариантов при хранении массивов объектов: (1) хранить каждое свойство в выделенном ключе (например, SET user:{id}:name Fred), (2) хранить весь объект как строку JSON в одном ключ (т.е. SET пользователя: {id} '{name:Fred}'); или (3) сохранить каждый объект в виде строки JSON в хеше Redis (т.е. пользователи HMSET {id} '{name:Fred}'). Конечно, у каждого есть свои преимущества и недостатки, но какой из них наиболее эффективен с точки зрения времени процессора/памяти? - person BMiner; 24.09.2013
comment
Кроме того, другим способом (4) является сохранение свойств каждого объекта в хеше Redis (т.е. HMSET user:{id} name "Fred"). - person BMiner; 24.09.2013
comment
Я бы хотел, чтобы этот ответ был пересмотрен, чтобы учесть все четыре (или, возможно, больше) подхода и эффективность процессора по сравнению с памятью каждого из них. :) Конечно, я полагаю, это зависит от того, как система планирует позже запрашивать эти данные. Не говоря уже о других преимуществах/недостатках помимо эффективности/скорости памяти. Как насчет лучших практик? - person BMiner; 24.09.2013

Из официального Redis

По возможности используйте хэши

Маленькие хэши кодируются в очень маленьком пространстве

Когда у вас не так много полей в нем.

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

person Aurel    schedule 11.02.2014

В моих тестах использование хэша занимает гораздо меньше места, но это единственная причина. Если у вас много данных, рассмотрите возможность использования хэша. В противном случае вы также можете использовать JSON, поскольку его легко сериализовать и десериализовать в объекты, если хотите, и обрабатывать в целом.

person Erik Bergstedt    schedule 11.12.2015