Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
5c04c9ee
提交
5c04c9ee
authored
6月 16, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加 TenantFrameworkServiceImpl 的缓存,提升性能
上级
5598f624
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
70 行增加
和
4 行删除
+70
-4
CacheUtils.java
...iocoder/yudao/framework/common/util/cache/CacheUtils.java
+25
-0
pom.xml
yudao-framework/yudao-spring-boot-starter-biz-tenant/pom.xml
+7
-0
TenantFrameworkServiceImpl.java
...ework/tenant/core/service/TenantFrameworkServiceImpl.java
+38
-4
没有找到文件。
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/cache/CacheUtils.java
0 → 100644
浏览文件 @
5c04c9ee
package
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
cache
;
import
com.google.common.cache.CacheBuilder
;
import
com.google.common.cache.CacheLoader
;
import
com.google.common.cache.LoadingCache
;
import
java.time.Duration
;
import
java.util.concurrent.Executors
;
/**
* Cache 工具类
*
* @author 芋道源码
*/
public
class
CacheUtils
{
public
static
<
K
,
V
>
LoadingCache
<
K
,
V
>
buildAsyncReloadingCache
(
Duration
duration
,
CacheLoader
<
K
,
V
>
loader
)
{
return
CacheBuilder
.
newBuilder
()
// 只阻塞当前数据加载线程,其他线程返回旧值
.
refreshAfterWrite
(
duration
)
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
.
build
(
CacheLoader
.
asyncReloading
(
loader
,
Executors
.
newSingleThreadExecutor
()));
}
}
yudao-framework/yudao-spring-boot-starter-biz-tenant/pom.xml
浏览文件 @
5c04c9ee
...
@@ -63,6 +63,13 @@
...
@@ -63,6 +63,13 @@
<artifactId>
spring-boot-starter-test
</artifactId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkServiceImpl.java
浏览文件 @
5c04c9ee
package
cn
.
iocoder
.
yudao
.
framework
.
tenant
.
core
.
service
;
package
cn
.
iocoder
.
yudao
.
framework
.
tenant
.
core
.
service
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
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
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.RequiredArgsConstructor
;
import
lombok.SneakyThrows
;
import
java.time.Duration
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -16,16 +21,45 @@ public class TenantFrameworkServiceImpl implements TenantFrameworkService {
...
@@ -16,16 +21,45 @@ public class TenantFrameworkServiceImpl implements TenantFrameworkService {
private
final
TenantApi
tenantApi
;
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
@Override
public
List
<
Long
>
getTenantIds
()
{
public
List
<
Long
>
getTenantIds
()
{
CommonResult
<
List
<
Long
>>
tenantIdsResult
=
tenantApi
.
getTenantIds
();
return
getTenantIdsCache
.
getUnchecked
(
Boolean
.
TRUE
);
tenantIdsResult
.
checkError
();
return
tenantIdsResult
.
getData
();
}
}
@Override
@Override
@SneakyThrows
public
void
validTenant
(
Long
id
)
{
public
void
validTenant
(
Long
id
)
{
tenantApi
.
validTenant
(
id
).
checkError
();
validTenantCache
.
getUnchecked
(
id
).
checkError
();
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论