【在使用redis缓存时如何将业务逻辑与缓存之间解耦 _缓存相关 】 | IT修真院·坑乎
问题已收录 在使用redis缓存时如何将业务逻辑与缓存之间解耦
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
缓存相关
详细描述
源码
编辑于2024-11-24
  • [武汉|结业弟子]JAVA-李伟明
    0

    可以使用一个缓存管理框架 AutoLoadCache

    https://github.com/qiujiayu/AutoLoadCache

    借鉴 Spring cache 的思想使用 AOP + Annotation 等技术实现缓存与业务逻辑的解耦。


    AutoloadCache 在 AOP 拦截到请求后,大概的流程如下:

    1 . 获取到拦截方法的 @Cache 注解,并生成缓存 key;

    2 . 通过缓存 key,去缓存中获取数据;

    3 . 如果缓存命中,执行如下流程:

    • 如果需要自动加载,则把相关信息保存到自动加载队列中;
    • 否则判断缓存是否即将过期,如果即将过期,则会发起异步刷新;
    • 最后把数据返回给用户。

    4 . 如果缓存没有命中,执行如下流程:

    • 选举出一个 leader 回到数据源中去加载数据,加载到数据后通知其它请求从内存中获取数据(拿来主义机制);
    • leader 负责把数据写入缓存;如果需要自动加载,则把相关信息保存到自动加载队列中;
    • 最后把数据返回给用户。


    例如这个样子

    编辑于2018-07-20