/** * 获取缓存数据 * * @param region 缓存分区 * @param key 缓存key * @param invoker 回调方法 * @return 返回对应类型的数据 */ @SuppressWarnings("unchecked") public static <T> T get(final String region, final String key, final ICacheInvoker<T> invoker) { // 1. 从正常缓存中获取数据 T data = (T) EhCacheManager.get(region, key); if (data == null) { logger.debug("在L1缓存中未找到内容!{} - {}", region, key); // 2. 从全局二级缓存中获取数据,执行自动更新数据策略,结果直接返回 data = (T) RedisCacheManager.get(region, key); if (invoker != null) { if (data == null) { logger.debug("在L2缓存中未找到内容!{} - {}", region, key); data = invoker.callback(); EhCacheManager.set(region, key, (Serializable) data); RedisCacheManager.set(region, key, (Serializable) data); } else { logger.debug("执行自动更新数据策略{} - {}", region, key); String thread_name = String.format("CacheUpdater-%s-%s", region, key); g_ThreadPool.execute( new Thread(thread_name) { @Override public void run() { Object result = invoker.callback(); if (result != null) { EhCacheManager.set(region, key, (Serializable) result); RedisCacheManager.set(region, key, (Serializable) result); } } }); } } } return data; }
public static void updateNow(final String region, final String key, final Serializable value) { RedisCacheManager.set(region, key, value); EhCacheManager.set(region, key, value); }
public static void evict(final String region, final String key) { EhCacheManager.evict(region, key); RedisCacheManager.evict(region, key); }
public static void destroy() { EhCacheManager.destroy(); RedisCacheManager.destroy(); }