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> LOCAL_CACHE = new ConcurrentHashMap<>(); /** * 获取 路由配置(优先从本地缓存读取) */ public static List getAppRoute(String appId){ String key = appId + _SUFFIX_APP_ROUTE; // 本地内存缓存命中,直接返回,省去远程Redis调用 List cached = LOCAL_CACHE.get(key); if (cached != null) { return cached.isEmpty() ? null : cached; } List 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 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(); } }