Blame view

java110-utils/src/main/java/com/java110/utils/cache/AppRouteCache.java 2.18 KB
88e030b7   王彪总   init project
1
2
3
4
5
  package com.java110.utils.cache;
  
  import com.java110.dto.system.AppRoute;
  import com.java110.utils.util.SerializeUtil;
  
9d76c359   王彪总   fix(config): 更新配置...
6
  import java.util.Collections;
88e030b7   王彪总   init project
7
  import java.util.List;
9d76c359   王彪总   fix(config): 更新配置...
8
9
  import java.util.Map;
  import java.util.concurrent.ConcurrentHashMap;
88e030b7   王彪总   init project
10
11
  
  /**
9d76c359   王彪总   fix(config): 更新配置...
12
   * 路由配置(带本地内存缓存,避免每次请求都查远程Redis
88e030b7   王彪总   init project
13
14
15
16
17
18
19
   * Created by wuxw on 2018/4/14.
   */
  public class AppRouteCache extends BaseCache {
  
      //后缀 用来刷缓存时删除 所有以这个为后缀的数据
      public final static String _SUFFIX_APP_ROUTE = "_SUFFIX_APP_ROUTE";
  
9d76c359   王彪总   fix(config): 更新配置...
20
21
22
      // 本地内存缓存,避免每次请求都查远程Redis
      private static final Map<String, List<AppRoute>> LOCAL_CACHE = new ConcurrentHashMap<>();
  
88e030b7   王彪总   init project
23
      /**
9d76c359   王彪总   fix(config): 更新配置...
24
       * 获取 路由配置(优先从本地缓存读取)
88e030b7   王彪总   init project
25
26
       */
      public static List<AppRoute> getAppRoute(String appId){
9d76c359   王彪总   fix(config): 更新配置...
27
28
29
30
31
32
33
34
          String key = appId + _SUFFIX_APP_ROUTE;
  
          // 本地内存缓存命中,直接返回,省去远程Redis调用
          List<AppRoute> cached = LOCAL_CACHE.get(key);
          if (cached != null) {
              return cached.isEmpty() ? null : cached;
          }
  
88e030b7   王彪总   init project
35
36
37
38
          List<AppRoute> appRoutes = null;
          Jedis redis = null;
          try {
              redis = getJedis();
9d76c359   王彪总   fix(config): 更新配置...
39
              appRoutes = SerializeUtil.unserializeList(redis.get(key.getBytes()), AppRoute.class);
88e030b7   王彪总   init project
40
41
42
              if(appRoutes == null || appRoutes.size() ==0) {
                  return null;
              }
9d76c359   王彪总   fix(config): 更新配置...
43
              LOCAL_CACHE.put(key, appRoutes);
88e030b7   王彪总   init project
44
45
46
47
48
49
50
51
52
53
54
          }finally {
              if(redis != null){
                  redis.close();
              }
          }
          return appRoutes;
      }
  
  
      /**
       * 保存路由信息
88e030b7   王彪总   init project
55
56
       */
      public static void setAppRoute(List<AppRoute> appRoutes){
9d76c359   王彪总   fix(config): 更新配置...
57
58
          String key = appRoutes.get(0).getAppId() + _SUFFIX_APP_ROUTE;
          LOCAL_CACHE.put(key, appRoutes);
88e030b7   王彪总   init project
59
60
61
          Jedis redis = null;
          try {
              redis = getJedis();
9d76c359   王彪总   fix(config): 更新配置...
62
              redis.set(key.getBytes(), SerializeUtil.serializeList(appRoutes));
88e030b7   王彪总   init project
63
64
65
66
67
68
69
          }finally {
              if(redis != null){
                  redis.close();
              }
          }
      }
  
9d76c359   王彪总   fix(config): 更新配置...
70
71
72
73
74
75
      /**
       * 清除本地缓存
       */
      public static void clearLocalCache() {
          LOCAL_CACHE.clear();
      }
88e030b7   王彪总   init project
76
  }