redis 大 value 问题?

2020-09-04 11:35:01 +08:00
 noble4cc

比如说一个 key 存储的 value 比较大,比如说存储了上百万的 list 或者 hash

redis 取出这种大 value 时怎么性能瓶颈具体是什么原因呢?另外如果我分片取的话,比如每次取一百个值,不全取出来,性能不就快很多了吗

1938 次点击
所在节点    Java
2 条回复
surfire91
2020-09-04 11:49:51 +08:00
数据传输量和操作时间复杂度的问题。
你每次取 100 个只,数据传输量是小了。但是时间复杂度不一定低,以 LRANGE 为例,时间复杂度是 O(S+N),这里 N = 100 (小),但是 S 不一定小(距离头或尾的 offset ),且 list 越大,S 也就可能越大。
kefirzhang
2020-09-04 15:29:45 +08:00
个人理解:第一个网络瓶颈,就是所谓的热 key 问题,热 key 容易造成两个问题,第一个如果是分布式的容易造成单点压力过大,还有如果这个 key 比较大那么可能造成网络阻塞,毕竟就算运营商的带宽是不设限的,但是机器的网卡带宽是有限的。
第二个就是大 key 存储过大可能造成的问题,如果是是 list hash 或者 set 一次性取过多 那么会造成产生一定的性能消耗,因为 list 和 set 基本都是链表或者双向链表。但是如果是 str 应该不会有额外的算力消耗,就是直接返回一个大块内存。

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

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

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

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

© 2021 V2EX