String vs Hash для строкового типа?Хэш будет иметь только один ключ вместо многих - PullRequest
3 голосов
/ 17 марта 2019

Например, я вижу, что многие люди делают что-то вроде следующего:

> set data:1000 "some string 1"
> set data:1001 "some string 2"

Но как насчет использования хеша для минимизации количества ключей?

> hset data 1000 "some string 1"
> hset data 1001 "some string 2"

ВВо-вторых, он создаст только один ключ data вместо того, чтобы создавать много ключей первым способом.

Какой способ рекомендуется?

Я просто вижу, что некоторые люди и учебник делают hset data:10 01 xxx.Это на самом деле не связано с моим вопросом.Мой вопрос просто спрашивает, что рекомендуется между set data:1001 xxx и hset data 1001 xxx.

И я не планирую модифицировать hash-max-zipmap-entries и hash-max-zipmap-value.Это означает, что хэш в конечном итоге превысит два значения.В таком конфиге два пути одинаковы?или какой способ рекомендуется?

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Причины использования строк:

  • вам нужно на тайм-ауты значений
  • значения семантически изолированы
  • вы находитесь в кластере и хотите, чтобы значения былиsharded по различным узлам для распределения нагрузки (sharding основан на ключе)

Причины использования хэшей:

  • Вы хотите иметь возможность очистить все из них одновременно(del / unlink), или есть тайм-аут, который влияет на все этих значений одновременно
  • , вы хотите иметь возможность перечислять их (предпочитайте hscan / hgetall over scan / keys)
  • немного лучшее использование памяти на самих клавишах
  • значения семантически связаны
  • все значения допустимына одном узле (будь то один сервер или кластер)
2 голосов
/ 18 марта 2019

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

Однако вы захотите использовать простые ключи, если вам нужно поддерживать срок действия, уведомления о пространстве ключей и т. Д., Тогда вам нужно будет использовать простые ключи.

Просто соблюдайте осторожность, чтобы настроить значения hash-max-zipmap-entries и hash-max-zipmap-value в вашем redis.conf, чтобы гарантировать правильную обработку хэшей для вашей среды.

Подробнее о деталях можно прочитать в разделе оптимизации памяти документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...