8

キーに一意のユーザー名を使用するだけでなく、ユーザー ID を使用する利点は何だろうと思っていました。

  • user:USERNAME => {パスワード: ハッシュ、年齢: 45}
  • ユーザー:0 => {ユーザー名: ユーザー名、パスワード: ハッシュ、年齢: 45}

ユーザーを名前で検索したいので、ユーザー名を ID に関連付けるために 2 番目のキー値のセットが必要になることに注意してください。

すべてのユーザー名が一意であり、英数字でなければならないことを考えると、ID システムを使用することが有益である特定の理由はあります。

私がこれを尋ねる主な理由は、特にデータベースが何らかの方法で正規化されている場合に、データベースでのルックアップ時間を短縮するため、主に ID を使用したためです。しかし、Redis にはこの利点がありません。そのため、ユーザー名だけでなくユーザー ID を使用する理由が他にあるのではないかと考えました。

助けてくれてありがとう、

プラッカープラック

ps Redis がハッシュを処理する方法のため、2 つの方法のメモリの違いについては実際にはよくわからないので、これに関する情報は良いかもしれませんが、後で自分でテストするかもしれません。

4

1 に答える 1

15

定義したユースケースでは問題ありませんが、整数のユーザー ID を使用すると他の利点があります。

遅かれ早かれ、他のオブジェクトでユーザー ID を参照したくなるでしょう。たとえば、「ユーザー pluckerpluck の友達」などです。それをモデル化するには、2 つの選択肢があります。

friendsof:pluckerpluck -> SET{tom, dick, harry}

VS

friendsof:1 --> SET{2, 3, 4}

前者のアプローチでは、通常のハッシュ テーブルを使用して要素を格納し、大量のメモリを使用します。後者のアプローチでは整数配列が使用され、メモリ効率が非常に高くなります。

整数セットのこの特別なエンコードは、IntSet と呼ばれます。プロパティを使用してRedisの動作を制御できますset-max-intset-entries

# Sets have a special encoding in just one case: when a set is composed
# of just strings that happens to be integers in radix 10 in the range
# of 64 bit signed integers.
# The following configuration setting sets the limit in the size of the
# set in order to use this special memory saving encoding.
set-max-intset-entries 512
于 2012-04-11T16:49:47.713 に答える