AppRouteCache.java
2.18 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.java110.utils.cache;
import com.java110.dto.system.AppRoute;
import com.java110.utils.util.SerializeUtil;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 路由配置(带本地内存缓存,避免每次请求都查远程Redis)
* Created by wuxw on 2018/4/14.
*/
public class AppRouteCache extends BaseCache {
//后缀 用来刷缓存时删除 所有以这个为后缀的数据
public final static String _SUFFIX_APP_ROUTE = "_SUFFIX_APP_ROUTE";
// 本地内存缓存,避免每次请求都查远程Redis
private static final Map<String, List<AppRoute>> LOCAL_CACHE = new ConcurrentHashMap<>();
/**
* 获取 路由配置(优先从本地缓存读取)
*/
public static List<AppRoute> getAppRoute(String appId){
String key = appId + _SUFFIX_APP_ROUTE;
// 本地内存缓存命中,直接返回,省去远程Redis调用
List<AppRoute> cached = LOCAL_CACHE.get(key);
if (cached != null) {
return cached.isEmpty() ? null : cached;
}
List<AppRoute> appRoutes = null;
Jedis redis = null;
try {
redis = getJedis();
appRoutes = SerializeUtil.unserializeList(redis.get(key.getBytes()), AppRoute.class);
if(appRoutes == null || appRoutes.size() ==0) {
return null;
}
LOCAL_CACHE.put(key, appRoutes);
}finally {
if(redis != null){
redis.close();
}
}
return appRoutes;
}
/**
* 保存路由信息
*/
public static void setAppRoute(List<AppRoute> appRoutes){
String key = appRoutes.get(0).getAppId() + _SUFFIX_APP_ROUTE;
LOCAL_CACHE.put(key, appRoutes);
Jedis redis = null;
try {
redis = getJedis();
redis.set(key.getBytes(), SerializeUtil.serializeList(appRoutes));
}finally {
if(redis != null){
redis.close();
}
}
}
/**
* 清除本地缓存
*/
public static void clearLocalCache() {
LOCAL_CACHE.clear();
}
}