项目中缓存的规划与使用

缓存具有通用性,本文基于如何在项目中规划缓存、以及缓存放在哪一层做了一些笔记。

为了保证缓存的管理和使用规范,应构建一个模块来统一管理缓存,如果缓存的get、set分散在项目各个地方,容易在团队协作时引起缓存使用混乱,堆积成屎山。

有了缓存统一管理模块,那么缓存应该在何时使用呢?也就是缓存应该放在那一层呢?如下图,这里以COLA架构为例,通常Controller Layer只是薄薄的一层,用来封装数据并做基础的数据校验,而Domain Layer不应该依赖任何其他模块,所以,缓存使用无非在Domain Layer之上或Domain Layer之下。

此外,有种观点认为,放在哪一层取决于缓存的目的:
如果是为了减少数据库压力,那么放在Infrastrcuture LayerDomain Layer之间;
如果是为了快速响应请求,放在Controller LayerApp Layer之间,甚至直接放在Controller Layer

项目中缓存的规划与使用_第1张图片

无论缓存放在Domain Layer之上或Domain Layer之下,都有一定的道理。

将缓存放在Domain Layer之下,Domain LayerRepository在调用时可以无感知的走缓存逻辑,另外,缓存带来了一个大问题即是数据不一致,所有的写操作都不应走缓存逻辑,所以,Repository可以分为CommandRepositoryQueryRepository,我们只在QueryRepository的实现中使用缓存,保证写操作时不使用缓存。
但是,将缓冲放在Domain Layer之下存在一个问题,用户请求的数据可能需要整合多个QueryRepository,对于此种缓存,完全可以在Domain Layer之上也就是App Layer实现,这样提供的缓冲更加精准。

另外,缓存如何使用,自定义缓存API?注解?有观点认为自定义缓存API的使用仍然有代码侵入,使用注解这种声明式能更方便的使用。

你可能感兴趣的:(缓存)