Redis中密钥的用户名或ID

Plu*_*uck 7 redis

我想知道使用用户ID的好处是什么,而不仅仅是使用密钥的唯一用户名.

  • user:USERNAME => {password:HASH,年龄:45}
  • user:0 => {username:USERNAME,密码:HASH,年龄:45}

请注意,我希望按名称查找用户,因此需要第二组键值来将用户名与ID相关联.

鉴于每个用户名都是唯一的并且必须是字母数字,因此使用ID系统可能有益的任何特定原因.

我问这个的主要原因是因为我主要使用ID,因为它们减少了我的数据库中的查找时间,特别是当数据库以某种方式规范化时.但Redis没有获得这个好处,所以我想知道可能有什么其他原因使用用户ID而不仅仅是用户名.

谢谢你的帮助,

Pluckerpluck

PS由于Redis的方式处理哈希我却很不确定的两种方法之间的差异内存等这些信息可能是好的,但我可以去,后来这个考验自己.

Sri*_*nan 15

在您定义的用例中无关紧要,但使用整数用户ID还有其他优点.

迟早,您可能希望在其他对象中引用用户ID.例如,"用户pluckerpluck之友".要对此进行建模,您有两种选择 -

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
Run Code Online (Sandbox Code Playgroud)

  • 散列更好有两个原因 - a)它使用的内存少于排序集,b)没有定义的用户排序,因此从概念上讲,使用排序集是没有意义的. (2认同)