package com.bcxin.sp.config.cache; import com.bcxin.sp.work.util.SpringContextUtil; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Iterator; import java.util.Set; /** * Cache工具类 * @author ThinkGem * @version 2013-5-29 */ public class CacheUtils { private static Logger logger = LoggerFactory.getLogger(CacheUtils.class); private static CacheManager cacheManager = SpringContextUtil.getBean(CacheManager.class); public static final String CURRENT_USER = "currentUser"; /** * 获取CURRENT_USER缓存 * @param key * @return */ public static Object get(String key) { return get(CURRENT_USER, key); } /** * 获取CURRENT_USER缓存 * @param key * @param defaultValue * @return */ public static Object get(String key, Object defaultValue) { Object value = get(key); return value != null ? value : defaultValue; } /** * 写入CURRENT_USER缓存 * @param key * @return */ public static void put(String key, Object value) { put(CURRENT_USER, key, value); } /** * 从CURRENT_USER缓存中移除 * @param key * @return */ public static void remove(String key) { remove(CURRENT_USER, key); } /** * 获取缓存 * @param cacheName * @param key * @return */ public static Object get(String cacheName, String key) { return getCache(cacheName).get(getKey(key)); } /** * 获取缓存 * @param cacheName * @param key * @param defaultValue * @return */ public static Object get(String cacheName, String key, Object defaultValue) { Object value = get(cacheName, getKey(key)); return value != null ? value : defaultValue; } /** * 写入缓存 * @param cacheName * @param key * @param value */ public static void put(String cacheName, String key, Object value) { getCache(cacheName).put(getKey(key), value); } /** * 从缓存中移除 * @param cacheName * @param key */ public static void remove(String cacheName, String key) { getCache(cacheName).remove(getKey(key)); } /** * 从缓存中移除所有 * @param cacheName */ public static void removeAll(String cacheName) { Cache cache = getCache(cacheName); Set keys = cache.keys(); for (Iterator it = keys.iterator(); it.hasNext();){ cache.remove(it.next()); } logger.info("清理缓存: {} => {}", cacheName, keys); } /** * 获取缓存键名,多数据源下增加数据源名称前缀 * @param key * @return */ private static String getKey(String key){ // String dsName = DataSourceHolder.getDataSourceName(); // if (StringUtils.isNotBlank(dsName)){ // return dsName + "_" + key; // } return key; } /** * 获得一个Cache,没有则显示日志。 * @param cacheName * @return */ private static Cache getCache(String cacheName){ Cache cache = cacheManager.getCache(cacheName); if (cache == null){ throw new RuntimeException("当前系统中没有定义“"+cacheName+"”这个缓存。"); } return cache; } }