8

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

  • 用户:用户名 => {密码:哈希,年龄:45}
  • 用户:0 => {用户名:USERNAME,密码:HASH,年龄:45}

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

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

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

谢谢你的帮助,

采摘

ps 由于 Redis 处理哈希的方式,我实际上不确定这两种方法之间的内存差异,所以这方面的信息可能很好,尽管我以后可能会自己去测试。

4

1 回答 1

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
于 2012-04-11T16:49:47.713 回答