guohongjin
2024-05-15 5b7639f0bd9e056738ec15100ed0532e965c6cd5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package cn.stylefeng.roses.kernel.cache.api.tenant;
 
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * 租户缓存动态代理
 *
 * @author fengshuonan
 * @date 2022/11/8 0:45
 */
@SuppressWarnings("all")
public class TenantCacheProxyFactory {
 
    /**
     * 存放所有代理的缓存
     */
    private static final Map<String, CacheOperatorApi<?>> proxyCacheMap = new HashMap<>();
 
    /**
     * 创建带租户控制的缓存代理
     *
     * @author fengshuonan
     * @date 2022/11/8 1:18
     */
    public static <T> CacheOperatorApi<T> createTenantCacheProxy(String tenantCode, CacheOperatorApi<?> cacheOperatorApi) {
 
        // 计算缓存的key
        String key = tenantCode + cacheOperatorApi.getCommonKeyPrefix();
 
        // 直接获取缓存中的代理
        if (proxyCacheMap.containsKey(key)) {
            return (CacheOperatorApi<T>) proxyCacheMap.get(key);
        }
 
        TenantCacheProxy tenantCacheProxy = new TenantCacheProxy();
        CacheOperatorApi<?> resultCacheOperator = tenantCacheProxy.bindCacheObject(tenantCode, cacheOperatorApi);
        proxyCacheMap.put(key, resultCacheOperator);
        return (CacheOperatorApi<T>) resultCacheOperator;
    }
 
}