redis - Redis 中键的用户名或 ID

标签 redis

我想知道使用用户 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

控制 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

关于redis - Redis 中键的用户名或 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109921/

相关文章:

托管在 Google Compute Engine 上的 Redis 主机名

linux - 如何在 initContainer 中使用 netcat ping 受密码保护的 Redis 服务器?

redis - 如何将一些键值对传递给redis zadd?

activerecord - 在 yii2 的 redis 模型中查询

Redis数据架构用于用户登录检查

redis - 为什么redis pubsub工作独立于数据库?

python - Celery任务状态只有 'PENDING'和 'SUCCESS',为什么任务状态中没有 "STARTED"?

spring-boot - Spring 启动+Redis

ubuntu - 创建服务器 TCP 监听套接字 * :6379: bind: Address already in use

ruby-on-rails - Redis 查找 set 包含元素的键