想问下大佬 40M 的字符串适合放到 redis 缓存吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pppwww
V2EX    Redis

想问下大佬 40M 的字符串适合放到 redis 缓存吗?

  •  
  •   pppwww 2023-11-11 23:16:09 +08:00 3620 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问下大佬们 40M 的字符串适合放到 redis 缓存吗?如果不适合的话怎么解决呢

    18 条回复    2023-11-13 10:49:32 +08:00
    Conantv2
        1
    Conantv2  
       2023-11-11 23:19:06 +08:00
    体积不是问题,问题是数据组织形式。大型业务开机就加载几十个 GB 内容进内存,直接内存读写,定期落盘。只要内存够,没什么不能放。
    night98
        2
    night98  
       2023-11-11 23:24:11 +08:00
    只要不是每次都从 redis 读然后返回就行了,可以启动时读到本地内存然后直接本地内存返回,发生变更就通过消息方式更新本地内存的内容就行
    seers
        3
    seers  
       2023-11-11 23:25:13 +08:00 via Android
    不知道你什么业务场景,要放这么大
    gwy15
        4
    gwy15  
       2023-11-11 23:25:49 +08:00   1
    40M 的字符串光是读取就可能造成瓶颈,按照 1G 的网卡的话,光走网络就要 0.34s ,10G 网卡也 33ms ,这就没有多高的 QPS ,如果你 redis 上有其他的读写的话肯定是要造成波动的,非常不合适。
    kuituosi
        5
    kuituosi  
       2023-11-11 23:38:19 +08:00
    memcache
    ktqFDx9m2Bvfq3y4
        6
    ktqFDx9m2Bvfq3y4  
       2023-11-12 05:01:44 +08:00 via iPhone   1
    @night98 #2
    @gwy15 #4

    大可以本地缓存,字符串本身加上版本号一起存储,同时在 Redis 另外加一个 key 保存这个版本号。这样使用端只需要先检查版本号,如果与本地不一致才去拿真正的字符串并更新本地缓存。

    这样字符串变化不频繁的话没什么影响。
    crysislinux
        7
    crysislinux  
       2023-11-12 08:37:34 +08:00 via Android
    不适合肯定是不适合的,不过可以压缩一下,如果是一个大的 JSON 数组,压缩率很高的,估计压完不到 2MB
    lsk569937453
        8
    lsk569937453  
       2023-11-12 09:02:16 +08:00
    网络传输是个问题
    zhuzhibin
        9
    zhuzhibin  
       2023-11-12 09:36:06 +08:00 via iPhone
    大 key 吃带宽 如果你的上下行带宽拉满当我没说
    Nazz
        10
    Nazz  
       2023-11-12 09:55:22 +08:00 via Android
    这么大不放文件里
    GGGG430
        11
    GGGG430  
       2023-11-12 11:27:54 +08:00
    1) 拆分, 一个拆分成多个小 key, 再维护一个大 key 到小 key 的映射
    2) 使用 memcache(多线程)
    最好也加上本地缓存
    YongXMan
        12
    YongXMan  
       2023-11-12 12:19:24 +08:00
    放进去不是问题,问题是这个 key 的使用方式是怎样的,每次全量读写?读写 qps 多少?如果操作类型是 substr 这种局部查询没啥问题,否则这一个 key 20 qps 就能把万兆带宽打满了,
    qianzanqi
        13
    qianzanqi  
       2023-11-12 15:41:12 +08:00
    适合,太适合了。只是不保证 redis 集群的 sla 而已,redis 挂了导致你们服务出问题是你们全责
    victorc
        14
    victorc  
       2023-11-12 17:53:01 +08:00
    不合适,这么大的数据,qps 一高,redis 必挂
    xuanbg
        15
    xuanbg  
       2023-11-13 08:19:54 +08:00
    主要看你怎么用。如果多台机器共享,那么除了 redis ,你也基本没有什么更简单的解决方案。如果单机,redis 适合整存零取或者零存零取的读写方式。整存整取的话,没必要脱裤子放屁。和数据的大小没什么关系,无论数据多大,总得读写,无非就是策略的问题,尽量避免过高的 IO 时间。
    pppwww
        16
    pppwww  
    OP
       2023-11-13 10:35:47 +08:00
    @Chad0000 嗯,目前看起来这种方法要更优一些,还是需要尽量减少访问 redis 的次数
    pppwww
        17
    pppwww  
    OP
       2023-11-13 10:37:33 +08:00
    @night98 确实,现在就是考虑使用这种方案,用楼下大佬说的版本号来实现下
    dilu
        18
    dilu  
       2023-11-13 10:49:32 +08:00
    最大的问题反而在网络传输上吧,如果可以最好还是放在本地缓存,后台起个协程定时刷新就行了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2505 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:05 PVG 13:05 LAX 22:05 JFK 01:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86