java实现本地数据缓存

首先,我们根据项目需要设计数据结构,比如map、list,下面是我所用到的数据结构,创建一个缓存工具类。

public class cacheUtil {
    private static ConcurrentMap<String, List<Map>>  IEC_ITEM_DATA= Maps.newConcurrentMap();

    public static synchronized void addData(String id, Map data) {
        getIECItemData(id).add(data);
    }

    public static synchronized void removeIECItem(String id) {
        IEC_ITEM_DATA.remove(id);
    }

    public static synchronized List<Map> getIECItemData(String id) {
        if (!IEC_ITEM_DATA.containsKey(id)){
            putIECItem(id, Lists.newArrayList());
        }
        return IEC_ITEM_DATA.get(id);
    }

    public static synchronized void putIECItem(String id, List<Map> data) {
        IEC_ITEM_DATA.put(id, data);
    }
}

接下来就是在项目中使用缓存工具将数据库数据缓存到本地,方便下次直接使用,而非再去查询数据库。

//从缓存中获取数据
List<Map> iecItemData = IECItemCacheUtil.getIECItemData(String.valueOf(childId));
List<Map<String,Object>> result = Lists.newArrayList();
//判断缓存中是否存在数据,若为空,则查询数据库,然后将数据放入缓存中
if(CollectionUtils.isEmpty(iecItemData)){
    Map dataMap = iec104CollectTemplateDao.queryItem(wfCode, childId);
    if(dataMap == null){
        return R.data(null);
    }
    Object tags = dataMap.get("tags");
    iecItemData = (List<Map>) ((Map)tags).get("iec104Items");
    //存入缓存
    IECItemCacheUtil.putIECItem(String.valueOf(childId),iecItemData);
}
//若缓存中有数据,则直接获取,进行处理
...

写在最后,利用map实现本地缓存就实现了,当然这种如果服务重启,缓存也清理了;
如果项目中有用到redis服务器,可以利用redis实现缓存,效率更高。
有关redis如何实现缓存,将在后面的博客中介绍!

你可能感兴趣的:(Java学习,java,缓存)