guava cache

307 阅读1分钟

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * guava cache
 *
 */
public class LocalCacheUtils {

    private static final Logger log = LoggerFactory.getLogger(LocalCacheUtils.class);

    /**
     * 使用google guava缓存处理
     */
    private static Cache<String, Object> cache;
    static {
        cache = CacheBuilder.newBuilder().maximumSize(10000).expireAfterWrite(24, TimeUnit.HOURS).initialCapacity(10)
                .removalListener(new RemovalListener<String, Object>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, Object> rn) {
                        if (log.isInfoEnabled()) {
                            log.info("被移除缓存{}:{}", rn.getKey(), rn.getValue());
                        }
                    }
                }).build();
    }

    /**
     * 是否存在
     * 
     * @param key
     * @return
     */
    public static boolean isExist(String key) {
        if (StringUtils.isBlank(key)) {
            return false;
        }
        return Objects.isNull(cache.getIfPresent(key)) ? false : true;
    }

    /**
     * 获取缓存
     * 
     * @param key
     * @return
     */
    public static String get(String key) {
        return StringUtils.isNotEmpty(key) ? String.valueOf(cache.getIfPresent(key)) : null;
    }

    /**
     * 放入缓存
     * 
     * @param key
     * @param value
     */
    public static void put(String key, String value) {
        if (StringUtils.isNotEmpty(key) && value != null) {
            cache.put(key, value);
        }
    }

    /**
     * 移除缓存
     * 
     * @param key
     */
    public static void remove(String key) {
        if (StringUtils.isNotEmpty(key)) {
            cache.invalidate(key);
        }
    }

    /**
     * 批量删除缓存
     * 
     * @param keys
     */
    public static void removeBatch(List<String> keys) {
        if (keys != null && keys.size() > 0) {
            cache.invalidateAll(keys);
        }
    }

}