我想知道使用用户 ID 而不是仅使用唯一用户名作为 key 有什么好处。
- user:USERNAME => {密码:HASH,年龄:45}
- user:0 => {用户名:USERNAME,密码:HASH,年龄:45}
请注意,我希望按名称查找用户,因此需要第二组键值将用户名与 ID 相关联。
鉴于每个用户名都是唯一的并且必须是字母数字,是否有任何特殊原因可以说明使用 ID 系统可能有益。
我问这个的主要原因是因为我主要使用 ID,因为它们减少了我数据库中的查找时间,尤其是当数据库以某种方式规范化时。但是 Redis 没有获得这种好处,所以我想知道还有什么其他原因可以使用用户 ID 而不仅仅是用户名。
感谢您的帮助,
采摘采摘
附注由于 Redis 处理哈希的方式,我实际上不确定这两种方法之间的内存差异,所以关于这方面的信息可能很好,尽管我稍后可能会自己测试。
最佳答案
在您定义的用例中无关紧要,但使用整数用户 ID 具有其他优势。
迟早,您会想要在其他对象中引用用户 ID。例如,“用户 pluckerpluck 的 friend ”。要对此建模,您有两种选择 -
friendsof:pluckerpluck -> SET{tom, dick, harry}
对比
friendsof:1 --> 设置{2, 3, 4}
前一种方式使用常规的Hash表来存储元素,并且使用大量的内存。后一种方法使用整数数组,并且内存效率极高。
这种对整数集的特殊编码称为 IntSet。您可以使用属性 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
关于redis - Redis 中键的用户名或 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109921/