Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

看了下缓存相关的代码,觉得太分离了 #32

Open
cwt9562 opened this issue May 23, 2023 · 5 comments
Open

看了下缓存相关的代码,觉得太分离了 #32

cwt9562 opened this issue May 23, 2023 · 5 comments

Comments

@cwt9562
Copy link

cwt9562 commented May 23, 2023

直接在UserApplicationService的相关查询方法里,默认直接调用缓存的方法,会不会好一点?
UserApplicationService里的查询方法是没缓存的,想要走缓存要通过CacheCenter
这样子很容易误调用了没缓存的查询方法

@valarchie
Copy link
Owner

你的意思是 XXXApplication的查询 类似用@cachable注解 默认用缓存?

这样子很容易误调用了没缓存的查询方法
XXXXApplication里面一般不会调用其他XXXApplication同层级的方法

@cwt9562
Copy link
Author

cwt9562 commented May 23, 2023

我的意思是 UserApplicationService里的部分查询方法,自身实现就自动调用cacheCenter里的部分缓存

@valarchie
Copy link
Owner

如何自动调用cacheCenter的缓存? 你这边建议的实现方案是?

@cwt9562
Copy link
Author

cwt9562 commented May 23, 2023

我举个例子
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);,好像更好一点

@valarchie
Copy link
Owner

SysProfileController 直接作为控制层,不应该包含什么逻辑。
你说的是对的,缓存要在UserApplicationService去调用。

但是一般项目中 没有必要所有地方都走缓存,比如这个Profile接口,一般是用户登录时请求一次。不走缓存的话也是没问题的。

缓存优化应该是具体场景具体分析,项目只是给了一个小例子,如果遇到大批量数据,可以Mybatis Plus配置缓存,或者ApplicationService里面去使用缓存。

预估到会有性能问题的接口,再优化也行,不用全盘走缓存。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants