分布式本地缓存的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Aliberter
V2EX    程序员

分布式本地缓存的问题

  •  
  •   Aliberter 2022-03-28 11:40:21 +08:00 3363 次点击
    这是一个创建于 1293 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    再说你把本地缓存搞成分布式的,还要二级 redis 干嘛?
    wolfie
        11
    wolfie  
       2022-03-28 18:02:54 +08:00
    非要沿用现成方案的话,Redis pub/sub 写一个对 map 修改。
    wolfie
        12
    wolfie  
       2022-03-28 18:03:23 +08:00
    现成方案 => 现在的方案。
    tramm
        13
    tramm  
       2022-03-28 18:04:15 +08:00
    多服务器间同步缓存数据, 本质上不就是 Redis 了.
    没必要用一级缓存了啊
    sunriz
        14
    sunriz  
       2022-03-28 19:05:59 +08:00
    先要问问用本地缓存收益高吗。本地缓存本质上就是用一致性换速度,一般都存静态的东西,或者实时性不敏感的数据。
    本地缓存跨机器同步就增加复杂度了,楼上说的对,这本身就是 redis 这种存储组件专门做的事情
    fkmc
        15
    fkmc  
       2022-03-28 20:47:52 +08:00 via iPhone
    redisson localcachemap
    或者 redis 发布订阅更新本地缓存 断开 redis 清空本地缓存
    mezi04
        16
    mezi04  
       2022-03-29 12:24:04 +08:00
    Hazelcast 或许能满足你的需求
    pumpkin2011
        17
    pumpkin2011  
       2022-03-29 15:09:13 +08:00
    if (time % 10 == 0) {
    reload() // async
    return oldData
    }
    orzwalker111
        18
    orzwalker111  
       2022-03-29 18:17:42 +08:00
    分析实际使用场景,实时性要求很高,用 1 ;否则 2
    1 、干掉本地缓存,只用远端缓存
    2 、保留本地缓存,本地缓存设置很小的过期时间,1 秒?从本地缓存读数据,过期的话读远端再写本地
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2603 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:00 PVG 23:00 LAX 08:00 JFK 11:00
    Do have faith in what you're doing.
    ubao 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