guva 之数据库本地缓存

maven 使用案例

import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

@Component
@Slf4j
public class HeliosReportCache {

    private LoadingCache<String, Object> ProductTreeCatchCache;

    @PostConstruct
    public void initData() {
        ProductTreeCatchCache = CacheBuilder.newBuilder().build(
                new CacheLoader<String, Object>() {
                    @Override
                    public Object  load(String key) throws Exception {
                        // 程序启动的时候加载 数据   
                        return new Object();
                    }
                });
    }


    public void initData2() {
        ProductTreeCatchCache = CacheBuilder.newBuilder().build(
                new CacheLoader<String,Object>() {
                    @Override
                    public Objectload(String key) throws Exception {
                        // 重新初始化
                        return new Object();
                    }
                });
    }


    private Object  initResource(String key) {
        //根据 Key值 查询 数据库 获取 Object
        ProductTreeCatchCache.put(key, Object);
        return Object;


    }
    public ObjectgetPolicyTreeInfo(String key) throws Exception {
        
        Object obj= null;
        try {
            Map<String, Object> map = ProductTreeCatchCache.asMap();
            if (map.containsKey(key)) {
                obj= ProductTreeCatchCache.get(key);
            } else {
                obj= initResource(key);
            }
        } catch (Throwable e) {
            log.warn("get Object Exception:{}", e);
            throw new RuntimeException(e.getCause());
        }
        return obj;
    }


    public LoadingCache<String, Object > getTemplatePlanCache() {
        return ProductTreeCatchCache;
    }
}

以上案例就是先查询数据库 查询到以后  放入本地缓存 下次同一个key 传递的时候  就从本地 缓存 读取数据 不在 读取数据库  核心思想 类似 java  Map 


guava  还有 定时更新 缓存  清空缓存 这里 不在一一描述。之前踩坑  清空缓存无效 !解决办法 缓存重新初始化 就行了 缓存定时更新!


@PostConstruct
    public void initData() {
        ProductTreeCatchCache = CacheBuilder.newBuilder().expireAfterWrite(8, TimeUnit.HOURS).build(
                new CacheLoader<String, Object>() {
                    @Override
                    public Object  load(String key) throws Exception {
                        // 程序启动的时候加载 数据   
                        return new Object();
                    }
                });
    }

缓存 定时刷新 ! 这种方法 建议 初始化加载所需的全部数据时候 使用!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值