performance - 从 Redis SETS 获取数据是否比 HSETS 更快或更高性能?
问题描述
我目前有一个场景,我们使用 REDIS 将字符串field-value
对存储在hashed set HSET
.
使用散列集而不只是集的原始原因是HSCAN
在 GUI 搜索栏中使用检索记录很容易,而不是SCAN
因为更容易获得在COUNT
字段中使用的散列长度。
我在 Redis 文档中读到GET
和HGET
命令都以 O(1) 时间复杂度执行,但我团队的一个成员认为,如果我将所有值存储在一个键中,那么它基本上会返回整个哈希,HGET
而不是单field-value
数我需要。
因此,对于一个虚构但类似的示例:
- 我有一个 Redis 实例,其中包含一个名为
users
. - 散列集有 150,000
field:value
对username:email
如果当我执行时hget users coolguy
,是返回整个哈希还是只返回用户的电子邮件coolguy
?
解决方案
首先,HSET 不是一个哈希集,它创建一个哈希表。redis中的hash表和set(确实是hash set)背后的机制是一样的,区别主要在于hash表是有值的。
要回答您的问题:
如果当我执行 hget users coolguy 时,是返回整个哈希还是只返回用户 coolguy 的电子邮件?
只是该用户的电子邮件。您还可以使用 HMGET 一次获取多个用户的电子邮件。对于您获取的每个用户,它是 O(1),对于 n 个用户,它是 O(n)。
推荐阅读
- azure-application-insights - Blazor 客户端 (WASM) 应用程序洞察
- apache-spark - spark.cassandra.output.throughput_mb_per_sec 不起作用
- r - 从另一列值设置类别
- json - 如何在 Hoverfly 匹配策略中匹配 json 路径?
- activiti - 我在哪里可以找到 Activiti 7 核心 API 文档?
- htmlpurifier - 如何允许元素同时允许 HTMLPurifier 中的自定义属性?
- python - 根据条件将嵌套列表中的值替换为另一个嵌套列表的值
- aiml - AIML如何检查输入字符串是否与地图中的一个匹配
- python - 编写一个函数,返回存在的素数数量,包括给定数字
- python - 在没有图形溢出的情况下限制 mplot3d 表面上的轴?