Open cwt9562 opened 1 year ago
你的意思是 XXXApplication的查询 类似用@cachable注解 默认用缓存?
这样子很容易误调用了没缓存的查询方法 XXXXApplication里面一般不会调用其他XXXApplication同层级的方法
我的意思是 UserApplicationService里的部分查询方法,自身实现就自动调用cacheCenter里的部分缓存
如何自动调用cacheCenter的缓存? 你这边建议的实现方案是?
我举个例子 com.agileboot.domain.system.user.UserApplicationService#getUserProfile 这个方法,就没有读取缓存
public UserProfileDTO getUserProfile(Long userId) {
SysUserEntity userEntity = userService.getById(userId);
SysPostEntity postEntity = userService.getPostOfUser(userId);
SysRoleEntity roleEntity = userService.getRoleOfUser(userId);
return new UserProfileDTO(userEntity, postEntity, roleEntity);
}
而它又被/system/user/profile接口调用了 com.agileboot.admin.controller.system.SysProfileController#profile 也就意味着该接口是无缓存的
如果想将该接口修改为有缓存的,按我看到你原本代码的思路,应该是在SysProfileController的profile方法里,去调用CacheCenter的部分类、方法 但是我觉得,直接在UserApplicationService的getUserProfile里,去调用userCache的缓存,替代userService.getById(userId);,好像更好一点
SysProfileController 直接作为控制层,不应该包含什么逻辑。 你说的是对的,缓存要在UserApplicationService去调用。
但是一般项目中 没有必要所有地方都走缓存,比如这个Profile接口,一般是用户登录时请求一次。不走缓存的话也是没问题的。
缓存优化应该是具体场景具体分析,项目只是给了一个小例子,如果遇到大批量数据,可以Mybatis Plus配置缓存,或者ApplicationService里面去使用缓存。
预估到会有性能问题的接口,再优化也行,不用全盘走缓存。
直接在UserApplicationService的相关查询方法里,默认直接调用缓存的方法,会不会好一点? UserApplicationService里的查询方法是没缓存的,想要走缓存要通过CacheCenter 这样子很容易误调用了没缓存的查询方法