V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noble4cc
V2EX  ›  Java

redis 大 value 问题?

  •  
  •   noble4cc · 2020-09-04 11:35:01 +08:00 · 1928 次点击
    这是一个创建于 1331 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    surfire91
        1
    surfire91  
       2020-09-04 11:49:51 +08:00
    数据传输量和操作时间复杂度的问题。
    你每次取 100 个只,数据传输量是小了。但是时间复杂度不一定低,以 LRANGE 为例,时间复杂度是 O(S+N),这里 N = 100 (小),但是 S 不一定小(距离头或尾的 offset ),且 list 越大,S 也就可能越大。
    kefirzhang
        2
    kefirzhang  
       2020-09-04 15:29:45 +08:00
    个人理解:第一个网络瓶颈,就是所谓的热 key 问题,热 key 容易造成两个问题,第一个如果是分布式的容易造成单点压力过大,还有如果这个 key 比较大那么可能造成网络阻塞,毕竟就算运营商的带宽是不设限的,但是机器的网卡带宽是有限的。
    第二个就是大 key 存储过大可能造成的问题,如果是是 list hash 或者 set 一次性取过多 那么会造成产生一定的性能消耗,因为 list 和 set 基本都是链表或者双向链表。但是如果是 str 应该不会有额外的算力消耗,就是直接返回一个大块内存。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2834 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:32 · PVG 14:32 · LAX 23:32 · JFK 02:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.