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

关于是使用本进程缓存还是分布式缓存的一点疑惑

  •  
  •   ashin
    axiaoxin 2018-06-11 17:40:49 +08:00 3400 次点击
    这是一个创建于 2748 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚才看 openresty 最佳实践的文档 在缓存这一节 https://moonbingbing.gitbooks.io/openresty-best-practices/ngx_lua/cache.html 说使用缓存时应该尽量使用本进程和本机的缓存解决。

    网络开销变小和不用序列化操作这些可以理解,但是在分布式环境下也应该尽量使用本进程缓存吗,这个一致性很难去保证吧,而且一个服务十几个进程就得需要十几倍的内存感觉很浪费?我都是尽量使用分布式内存,在 redis 里面统一存一份。

    8 条回复    2018-06-12 11:51:51 +08:00
    jybox
        1
    jybox  
       2018-06-11 17:46:36 +08:00
    并不是所有缓存都需要一致性呀,可以考虑放在进程内缓存的情况:不需要一致性、访问频率高、总数据集小、重建成本低(进程重启后缓存为空不会被压垮)。关于内存占用的话,其实还可以考虑在靠前的负载均衡上面做一致性散列。
    Itoktsnhc
        2
    Itoktsnhc  
       2018-06-11 18:00:17 +08:00
    进程内缓存或本地缓存主要是为了高访问频率下的快速响应,分布式内存也是要走网络的,这个开销还是蛮大的。
    如果觉得内存占用比较浪费,可以对本地缓存设置较短的过期时间,降低本地缓存导致的内存使用。
    如果对一致性还是有些要求的 可以考虑使用消息队列的方式,订阅更新缓存的信息。
    troycheng
        3
    troycheng  
       2018-06-11 18:07:40 +08:00
    主要看应用场景,比如数据不经常变动,但访问频次高,应用又耗时敏感,使用本地缓存就会好一些
    sampeng
        4
    sampeng  
       2018-06-11 21:33:06 +08:00
    举例:v2 的帖子是不允许编辑的。。内容就完全可以在进程缓存。而不需要 redis
    fengchang
        5
    fengchang  
       2018-06-11 23:31:14 +08:00   1
    我以前在设计缓存的时候踩过不少坑,使用本地缓存时要考虑的点很多:

    1. 分布式服务如果缓存量比较大的话,要在 client side 做路由策略
    2. 有路由策略就需要考虑重启服务期间和扩容缩容时路由变化请求打到其他机器上产生无法被覆盖的脏数据
    3. 同理,数据被更新时,清理分布在本地缓存中的数据比较麻烦
    4. 重启服务本地缓存会被清空,需要考虑预热
    5. 使用 Java 时,大量数据的 GC 很麻烦
    6. 为了避免 GC 使用 off-heap memory 的话,你会发现反序列化的时间比想象的占比要高很多

    我的总结是,如果你在用 Java,不要对本地缓存解决性能问题报太大期望。
    Raymon111111
        6
    Raymon111111  
       2018-06-11 23:48:14 +08:00
    本地缓存主要是考虑, 延迟低 /频次高.

    如果可以用分布式搞定的, 就尽量用分布式.

    本地缓存很明显在维护一致性上要花比较大的功夫, 确实是没办法才使用.

    这里简单考虑:
    1. 新增 /修改 /删除怎么同步所有机器(不同机器生效还可能有业务可感知的先后)
    2. 机器重启怎么全量拉取最新的一份缓存(和 1 还可能有并发冲突)
    ashin
        7
    ashin  
    OP
       2018-06-12 10:41:06 +08:00
    @fengchang 有没有详细的文章分享你这里的设计方案和踩过的坑啊
    fengchang
        8
    fengchang  
       2018-06-12 11:51:51 +08:00
    @ashin 缓存设计和数据的特点有关,和业务关系太紧,写的东西都只能放在内网了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2765 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 07:29 PVG 15:29 LAX 23:29 JFK 02:29
    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