从 Redis SETS 获取数据是否比 HSETS 更快或更高效?
Is getting data back from Redis SETS faster or more performant than HSETS?
我目前有一个场景,我们使用 REDIS 在 hashed set HSET
中存储字符串 field-value
对。
使用散列集而非仅集的最初原因是在 GUI 搜索栏中使用 HSCAN
检索记录比仅 SCAN
更容易,因为它更容易获得长度在 COUNT
字段中使用的散列。
我在 Redis 文档中读到 GET
和 HGET
命令都以 O(1) 时间复杂度执行,但我的团队成员认为如果我将所有值存储在单键然后它基本上 returns HGET
期间的整个哈希,而不是我需要的单数 field-value
。
所以对于一个虚构但相似的例子:
- 我有一个带有单个哈希集的 Redis 实例,名为
users
。
- 哈希集有 150,000
field:value
对 username:email
如果当我执行 hget users coolguy
时,返回的是整个散列还是用户 coolguy
的电子邮件?
首先,HSET不是哈希集,它创建的是哈希table。 redis中的hashtable和set(其实就是hash集合)背后的机制是一样的,区别主要在于hashtable是有值的。
回答你的问题:
If when I execute hget users coolguy, is the entire hash getting returned or just the email for user coolguy?
只是该用户的电子邮件。您还可以使用 HMGET 一次获取多个用户的电子邮件。对于您获取的每个用户,它是 O(1),对于 n 个用户,它是 O(n)。
我目前有一个场景,我们使用 REDIS 在 hashed set HSET
中存储字符串 field-value
对。
使用散列集而非仅集的最初原因是在 GUI 搜索栏中使用 HSCAN
检索记录比仅 SCAN
更容易,因为它更容易获得长度在 COUNT
字段中使用的散列。
我在 Redis 文档中读到 GET
和 HGET
命令都以 O(1) 时间复杂度执行,但我的团队成员认为如果我将所有值存储在单键然后它基本上 returns HGET
期间的整个哈希,而不是我需要的单数 field-value
。
所以对于一个虚构但相似的例子:
- 我有一个带有单个哈希集的 Redis 实例,名为
users
。 - 哈希集有 150,000
field:value
对username:email
如果当我执行 hget users coolguy
时,返回的是整个散列还是用户 coolguy
的电子邮件?
首先,HSET不是哈希集,它创建的是哈希table。 redis中的hashtable和set(其实就是hash集合)背后的机制是一样的,区别主要在于hashtable是有值的。
回答你的问题:
If when I execute hget users coolguy, is the entire hash getting returned or just the email for user coolguy?
只是该用户的电子邮件。您还可以使用 HMGET 一次获取多个用户的电子邮件。对于您获取的每个用户,它是 O(1),对于 n 个用户,它是 O(n)。