Redis中密钥的用户名或ID

时间:2012-04-11 16:21:41

标签: redis

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

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

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

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

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

感谢您的帮助,

Pluckerpluck

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

1 个答案:

答案 0 :(得分:15)

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

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

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

VS

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

前一种方法使用常规哈希表来存储元素,并使用大量内存。后一种方法使用整数数组,并且内存效率极高。

这组整数的特殊编码称为IntSet。您可以使用属性set-max-intset-entries

控制Redis的行为
# 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