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