/** * 如果该cache已经存在,则不再创建并返回已有cache * * @param groupId 如果cache和账号无关,置为null,创建全局cache * @param expireTime 小于0(比如-1)则忽略超时 */ public <K, V> Cache<K, V> createPersistedLruExpireCache( String groupId, CacheKey cacheID, int capacity, long expireTime) { if (groupId == null) { groupId = GLOBAL_CACHE_GROUP_ID; } Map<CacheKey, Cache> caches; synchronized (cacheMap) { caches = cacheMap.get(groupId); if (caches == null) { caches = new ConcurrentHashMap<>(); cacheMap.put(groupId, caches); LogUtil.w(sTAG, groupId + " caches not exist, warning."); } } Cache<K, V> cache = caches.get(cacheID); if (cache == null) { try { cache = new PersistedLruExpireCache(cacheID.getKey(), groupId, capacity, 1, expireTime); caches.put(cacheID, cache); } catch (IOException e) { LogUtil.e(sTAG, e.getMessage(), e); } } else { cache.setCapacity(capacity); } return cache; }
/** * 给指定账号创建SimpleCache,注意如果该cache已经存在,则不再创建并返回已有cache * * @param groupId 输入null,创建全局性账号无关cache * @return cache */ public <K, V> Cache<K, V> createSimpleCache(String groupId, CacheKey cacheID, int capacity) { if (groupId == null) { groupId = GLOBAL_CACHE_GROUP_ID; } Map<CacheKey, Cache> caches; synchronized (cacheMap) { caches = cacheMap.get(groupId); if (caches == null) { caches = new ConcurrentHashMap<>(); cacheMap.put(groupId, caches); LogUtil.w(sTAG, groupId + " caches not exist, warning."); } } return addSimpleCache(groupId, caches, cacheID, capacity); }
/** * 给指定账号创建cache,注意如果该cache已经存在,则不再创建并返回已有cache cache支持超时功能,但容量capacity固定,超限后会丢失老数据 * * @param groupId 输入null,创建全局性账号无关cache * @param expireTime 小于0(通常为-1)则不检查超时 */ public <K, V> Cache<K, V> createExpireCache( String groupId, CacheKey cacheID, int capacity, long expireTime) { if (groupId == null) { groupId = GLOBAL_CACHE_GROUP_ID; } Map<CacheKey, Cache> caches; synchronized (cacheMap) { caches = cacheMap.get(groupId); if (caches == null) { caches = new ConcurrentHashMap<>(); cacheMap.put(groupId, caches); LogUtil.w(sTAG, groupId + " caches not exist, warning."); } } Cache<K, V> cache = caches.get(cacheID); if (cache == null) { cache = new ExpireCache<>(groupId, capacity, expireTime); caches.put(cacheID, cache); } else { cache.setCapacity(capacity); } return cache; }