Redis 中 get 和 hget 到底谁更快?

2023-02-07 16:43:33 +08:00
 cmhonker

如题所示,Redis 中 GET 和 HGET 到底谁更快?

据资料显示:

HGET:返回指定 Hash 中 field 字段的值,时间复杂度 O(1).
GET:获取某个 key 对应的 value ,时间复杂度 O(1).

问题来了:

都是 1000w 条数据,再不考虑内存的情况下谁更快呢?

3605 次点击
所在节点    Redis
11 条回复
falsemask
2023-02-07 17:11:14 +08:00
我觉得是 get ,hget 要算两次 hash
Mirana
2023-02-07 17:12:33 +08:00
get 啊
cco
2023-02-07 17:14:13 +08:00
肯定 get 啊。
cmhonker
2023-02-07 17:31:43 +08:00
@falsemask 为什么呢,hget 也是一次哈希计算吧?
wangxin3
2023-02-07 17:49:08 +08:00
我理解的。hget key fieldName 首先要从 redis 中找到这个 hash 表(这里 hash 表是 1000w 条数据),然后从 hash 表中取出指定 fieldName 的一条数据,虽然时 O(1),但是比 get 多了从 hash 表再取数据的操作。
fanchenio
2023-02-07 17:56:16 +08:00
hget ,首先得找到那个 map 吧,然后再去找 map 里的元素,get 直接提取就好了,hget 两个步骤,get 一个步骤,个人感觉,应该是 get 快吧。
imdgr886
2023-02-07 18:09:38 +08:00
有没有可能,get 比 hget 只快了 1% (瞎猜的),楼主如果有时间可以测试一下,搞点 mock 数据,用两个方法操作 10w 次
falsemask
2023-02-07 18:11:56 +08:00
@cmhonker 取 field 还需要一次
8355
2023-02-07 18:27:12 +08:00
get 是访问变量
hget 是访问数组
hhjswf
2023-02-07 18:39:30 +08:00
@cmhonker 盲猜两次吧,第一次计算 key 的位置,第二次计算 field 在集合中的位置
iweus
2023-02-08 11:03:08 +08:00
Redis 中的 GET 和 HGET 在性能上的差异取决于它们的使用场景。

GET 操作是从 Redis 键空间中获取字符串类型的键的值,它是 Redis 最基本的存储操作,并且比较快速。

HGET 操作是从 Redis 中的哈希表中获取字段的值,它的性能一般比 GET 慢一些,因为它需要进行额外的计算,以确定哈希表中存储的位置。

因此,如果您需要从 Redis 中快速获取字符串类型的键,那么 GET 操作是一个更好的选择,如果您需要从 Redis 哈希表中获取字段的值,则 HGET 操作是一个更好的选择。



来自 chatGPT 的回答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/913978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX