Redis hash结构以下两种存储方式哪种比较高效?

数据量:20万用户信息
1、
如图,20万用户放在一个hash里面,hashkey是用户的id,value是用户的信息
2、
如图,20万用户有20万个hash,每个hash的hashkey是用户信息的字段名

以上两种方式哪种更好?最好能告知下原由。

感谢各位大佬。

回答

我个人觉得,都使用到Redis了, Redis操作都是在内存中完成的, 内存效率问题大不可担心, 数据量的大小,影响了Redis序列化进行存储效率! (还有这么大的数据量存储Redis好像并不合理, 内存占用过多) (不认同莫介意!) 可以看看这个

20W 级别的数据量,二者的性能差别可忽略不计。

千万甚至亿级别以后的数据量再考虑这个事儿吧。

首先你要知道 Hash 结构随着元素的增加、性能会随之下降,主要是两个原因:内存膨胀和哈希冲突。

所以数据量特大时,一般会拆分 Hash 结构,由一次哈希变为两次哈希(即所谓的哈希桶策略)。

拿你这个场景举例子,可以把 ID 是 1 到 1W 的放在一个 Key 下,里面再用 HashKey 存每个 ID;再把 ID 是 1W 到 2W 的放另一个 Key 下,里面还是 HashKey……依此类推。客户端在存取之前,先要判断一下要取的 ID 是哪个桶下的。

大概的结构就是:

Key: user:10000

HashKeyValue
1{ id: 1 }
2{ id: 2 }

Key: user:20000

HashKeyValue
10001{ id: 10001 }
10002{ id: 10002 }

(这么做也不是没有缺点,不是说存取的时候多了判断的一步,是别的,你可以自己思考一下)。


P.S. 前者还有个 JSON 反序列化的性能开销,但与 Redis 无关,这里不做讨论。

从设计角度看,用户量会持续增加,而userinfo的结构不怎么变化。在使用过程中,一般使用userinfo某一个字段。所以使用第二种比较合适

以上是 Redis hash结构以下两种存储方式哪种比较高效? 的全部内容, 来源链接: utcz.com/a/23134.html

回到顶部