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

哪层缓存比较合理, API 层?业务层?

  •  
  •   xe2v321 · 2020-12-08 14:51:54 +08:00 · 2487 次点击
    这是一个创建于 1475 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景:APP 请求 API 层返回最新版本信息(API 和实际业务是不同项目)
    疑问:
    1 、版本信息缓存在 API 层,可以减少业务层一部分的请求,但是版本信息更新 API 层是未知的
    2 、缓存如果在放在业务层,能够知道信息的变更可以即使更新缓存,但是请求已经到了业务层

    7 条回复    2020-12-11 17:55:26 +08:00
    damngood
        1
    damngood  
       2020-12-08 15:00:44 +08:00
    我们当前的做法是缓存放在业务层, api handler 层只做校验和组装请求返回的工作.

    不过如果把 redis 层暴露在 handler 层应该也是可以的吧, 不过那就要做好缓存失效通知的工作. 那样可能更细粒度点, 而且也相应复杂些.

    毕竟 cache invalidate 是计算机系统两大难题之一.. /sigh
    catror
        2
    catror  
       2020-12-08 15:04:00 +08:00
    用 MQ 把更新通知发到 API 层
    用 Redis 缓存,业务层写 API 层读
    版本信息实时性要求不高,隔几分钟让缓存失效就好了
    MinQ
        3
    MinQ  
       2020-12-08 15:06:24 +08:00 via Android
    可不可以这么设计,如果变更不是特别频繁的话,API 层用一个时间戳记录数据有没有被修改过。要求更新数据的时候同步更新时间戳,查询数据时发现缓存的时间戳和现在不一样了,表示数据变更过了,就拉新的数据,否则直接丢缓存回去
    coderxy
        4
    coderxy  
       2020-12-08 15:15:39 +08:00
    api 层合理,因为有的复杂接口是涉及到多个业务接口组合的数据。
    fhsan
        5
    fhsan  
       2020-12-08 15:17:25 +08:00
    api 缓存结果
    hpeng
        6
    hpeng  
       2020-12-08 15:35:35 +08:00 via iPhone
    真要求高,做一层缓存更新失效通知就好了。
    ychost
        7
    ychost  
       2020-12-11 17:55:26 +08:00
    API 层合理,业务层如果变了可能改缓存设计,但是在 API 就不会,另外你这个是缓存命中率问题,无论在那一层都会有的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:16 · PVG 03:16 · LAX 11:16 · JFK 14:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.