增加 TenantFrameworkServiceImpl 的缓存,提升性能

This commit is contained in:
YunaiV
2022-06-17 07:53:05 +08:00
parent 5598f62456
commit 5c04c9eeaf
3 changed files with 70 additions and 4 deletions

View File

@@ -1,9 +1,14 @@
package cn.iocoder.yudao.framework.tenant.core.service;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.cache.CacheUtils;
import cn.iocoder.yudao.module.system.api.tenant.TenantApi;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import java.time.Duration;
import java.util.List;
/**
@@ -16,16 +21,45 @@ public class TenantFrameworkServiceImpl implements TenantFrameworkService {
private final TenantApi tenantApi;
/**
* 针对 {@link #getTenantIds()} 的缓存
*/
private final LoadingCache<Object, List<Long>> getTenantIdsCache = CacheUtils.buildAsyncReloadingCache(
Duration.ofMinutes(1L), // 过期时间 1 分钟
new CacheLoader<Object, List<Long>>() {
@Override
public List<Long> load(Object key) {
CommonResult<List<Long>> tenantIdsResult = tenantApi.getTenantIds();
tenantIdsResult.checkError();
return tenantIdsResult.getData();
}
});
/**
* 针对 {@link #validTenant(Long)} 的缓存
*/
private final LoadingCache<Long, CommonResult<Boolean>> validTenantCache = CacheUtils.buildAsyncReloadingCache(
Duration.ofMinutes(1L), // 过期时间 1 分钟
new CacheLoader<Long, CommonResult<Boolean>>() {
@Override
public CommonResult<Boolean> load(Long id) {
return tenantApi.validTenant(id);
}
});
@Override
public List<Long> getTenantIds() {
CommonResult<List<Long>> tenantIdsResult = tenantApi.getTenantIds();
tenantIdsResult.checkError();
return tenantIdsResult.getData();
return getTenantIdsCache.getUnchecked(Boolean.TRUE);
}
@Override
@SneakyThrows
public void validTenant(Long id) {
tenantApi.validTenant(id).checkError();
validTenantCache.getUnchecked(id).checkError();
}
}