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
HashKey | Value |
---|---|
1 | { id: 1 } |
2 | { id: 2 } |
Key: user:20000
HashKey | Value |
---|---|
10001 | { id: 10001 } |
10002 | { id: 10002 } |
(这么做也不是没有缺点,不是说存取的时候多了判断的一步,是别的,你可以自己思考一下)。
P.S. 前者还有个 JSON 反序列化的性能开销,但与 Redis 无关,这里不做讨论。
从设计角度看,用户量会持续增加,而userinfo的结构不怎么变化。在使用过程中,一般使用userinfo某一个字段。所以使用第二种比较合适
以上是 Redis hash结构以下两种存储方式哪种比较高效? 的全部内容, 来源链接: utcz.com/a/23134.html