数据量:20万用户信息
1、
如图,20万用户放在一个hash里面,hashkey是用户的id,value是用户的信息
2、
如图,20万用户有20万个hash,每个hash的hashkey是用户信息的字段名
以上两种方式哪种更好?最好能告知下原由。
感谢各位大佬。
数据量:20万用户信息
1、
如图,20万用户放在一个hash里面,hashkey是用户的id,value是用户的信息
2、
如图,20万用户有20万个hash,每个hash的hashkey是用户信息的字段名
以上两种方式哪种更好?最好能告知下原由。
感谢各位大佬。
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 无关,这里不做讨论。
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
我个人觉得,都使用到Redis了, Redis操作都是在内存中完成的, 内存效率问题大不可担心, 数据量的大小,影响了Redis序列化进行存储效率! (还有这么大的数据量存储Redis好像并不合理, 内存占用过多) (不认同莫介意!) 可以看看这个