分布式本地缓存的问题 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
Aliberter

分布式本地缓存的问题

  •  
  •   Aliberter Mar 28, 2022 3915 views
    This topic created in 1514 days ago, the information mentioned may be changed or developed.

    项目里现在用的自己实现的二级缓存,一级是基于 ConcurrentHashMap 的本地缓存,二级是 redis 缓存,这就导致了个很严重的问题,不能集群部署,因为一级缓存无法同步,集群部署,服务一切换数据就不一样了,所以想问问大佬们,有没有能支持进程之间(我们还是 docker 部署,docker 容器的进程,不行的话 linux 进程也行,就不用 docker 了)内存( jvm 的堆内存)数据同步的组件,实现成本对于我们现在这个来说也比较低的,有这种东西吗?或者自己怎么改造现有的缓存组件来实现这一目的?

    18 replies    2022-03-29 18:17:42 +08:00
    aper div class="fr">     1
    aper  
       Mar 28, 2022
    redis 6.0 client-side cache ,或者自己搭个 MQ 吧
    decken
        2
    decken  
       Mar 28, 2022
    mmap
    hangszhang
        3
    hangszhang  
       Mar 28, 2022
    mq 同步到服务集群更新一级缓存呢?
    MoYi123
        4
    MoYi123  
       Mar 28, 2022
    本地缓存是确实有必要的吗? 最简单的方法是不要用本地缓存.
    potatowish
        5
    potatowish  
       Mar 28, 2022
    查询频率高、几乎不需要更新的数据才会做进程缓存吧,目的就是为了减少网络和序列化开销,你这种情况应该考虑用分布式缓存
    Red998
        6
    Red998  
       Mar 28, 2022
    为什么不是一级 Redis 、二级本地兜底? 本地缓存虽然性能高、但是也有局限性 你用 ConcurrentHashMap 也要考虑内存大小、LRU 清除、定时刷新、缓存不共享问题。本地缓存考虑使用 Caffeine
    ikas
        7
    ikas  
       Mar 28, 2022
    10 年前我们用 JGroups 实现分布式同步缓存..到了如今依然没有好的办法
    但是人们基本都接受了独立中央缓存这种模式
    所以....
    cc959798
        8
    cc959798  
       Mar 28, 2022
    量不大的话没必要本地缓存
    fengjianxinghun
        9
    fengjianxinghun  
       Mar 28, 2022
    1. 一级进程级 LRU 缓存
    2. 二级本机 mmap 共享内存缓存
    3. 分布式 redis 缓存
    4. 分布式 tidb
    5. 分布式 es
    zmal
        10
    zmal  
       Mar 28, 2022
    你要同步本地缓存,就大大增加了缓存技术的复杂度,有一点得不偿失。
    一般是一级本地缓存过期时间尽量调短一点,损失一定的一致性来换性能。

    再说你把本地缓存搞成分布式的,还要二级 redis 干嘛?
    wolfie
        11
    wolfie  
       Mar 28, 2022
    非要沿用现成方案的话,Redis pub/sub 写一个对 map 修改。
    wolfie
        12
    wolfie  
       Mar 28, 2022
    现成方案 => 现在的方案。
    tramm
        13
    tramm  
       Mar 28, 2022
    多服务器间同步缓存数据, 本质上不就是 Redis 了.
    没必要用一级缓存了啊
    sunriz
        14
    sunriz  
       Mar 28, 2022
    先要问问用本地缓存收益高吗。本地缓存本质上就是用一致性换速度,一般都存静态的东西,或者实时性不敏感的数据。
    本地缓存跨机器同步就增加复杂度了,楼上说的对,这本身就是 redis 这种存储组件专门做的事情
    fkmc
        15
    fkmc  
       Mar 28, 2022 via iPhone
    redisson localcachemap
    或者 redis 发布订阅更新本地缓存 断开 redis 清空本地缓存
    mezi04
        16
    mezi04  
       Mar 29, 2022
    Hazelcast 或许能满足你的需求
    pumpkin2011
        17
    pumpkin2011  
       Mar 29, 2022
    if (time % 10 == 0) {
    reload() // async
    return oldData
    }
    orzwalker111
        18
    orzwalker111  
       Mar 29, 2022
    分析实际使用场景,实时性要求很高,用 1 ;否则 2
    1 、干掉本地缓存,只用远端缓存
    2 、保留本地缓存,本地缓存设置很小的过期时间,1 秒?从本地缓存读数据,过期的话读远端再写本地
    About     Help     Advertise     Blog     API     FAQ     Solana     5391 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 186ms UTC 01:36 PVG 09:36 LAX 18:36 JFK 21:36
    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