Cache缓存服务器 将查询比较频繁的信息放入缓存当中
来源:互联网 发布:在虚拟机上安装mac os 编辑:程序博客网 时间:2024/05/16 12:10
缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。 缓存主要可分为二大类: 一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式; 二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.
接下来说的是 内存缓存 (基于cache)
package cn.huimin.account.base.cache;import java.util.HashMap;import java.util.Map;import org.apache.commons.lang.StringUtils;import org.apache.log4j.Logger;import cn.huimin.common.constants.ErrorConstants;import cn.huimin.common.constants.MicroServiceConstants;import cn.huimin.common.util.httpclient.http.HttpPostRequest;import cn.huimin.common.util.httpclient.http.RestClient;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class BranchCache{//生命静态map集合 用于放置内存缓存信息public static Map<String,String> branchCache = new HashMap<String, String>();public static Logger LOGGER=Logger.getLogger(BranchCache.class);private static String HEAD_OFFICE = "1";// 总公司的id/** 根据id获得name */public static String get(String key) {checkEmptyAndLoad();if(StringUtils.isNotEmpty(key)) {if(LOGGER.isDebugEnabled()) {LOGGER.info("从缓存中提取数据 Key:"+ key +" = data:" + branchCache.get(key).toString());}return branchCache.get(key);}return null;}// 当每次需要在缓存中取数据的时候 ,缓存要先查看缓存map中是不是有/** 检查集合是否为空,如果为空则加载数据 */public static void checkEmptyAndLoad() {if (branchCache.size() == 0) {synchronized (BranchCache.class) {//Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,
//能够保证在同一时刻最多只有一个线程执行该段代码if (branchCache.size() == 0) {LOGGER.info("缓存中无分公司数据,提取字典表数据到缓存开始--------");getDataToDD();//缓存为空 LOGGER.info("缓存中无分公司数据,提取字典表数据到缓存结束--------");}}}}//生命 branchCache 其实就是自己定义的一个map集合 ,不要想的太高大上// 将数据字典表的数据缓存到内存 缓存为空时执行public static void getDataToDD() {LOGGER.info("从微服务接口获得分公司");String resp=new RestClient().GET(MicroServiceConstants.BRANCHES_URL,null);Map<String,Object> resultMap=new HashMap<String, Object>();resultMap=HttpPostRequest.changeDeal(resp, resultMap);//post请求方式 ,这里是用于接口请求if(ErrorConstants.ERR_000000.equals(resultMap.get("respCode"))){//返回值校验 JSONArray json=JSONArray.fromObject(resultMap.get("content")); //获取返回的json信息 if(json.size()>0){ for(int i=0;i<json.size();i++){ JSONObject job = json.getJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象 branchCache.put(job.get("branchid")+"", job.get("branchname")+""); } } }}public static void clear() {branchCache.clear();}/** * 获取集合数据 * * @return */public static Map<String, String> getAll() {checkEmptyAndLoad();return new HashMap<String, String>(branchCache);}/** * 按分公司id获取分公司信息 * * @param branchId 这里是根据ID来获取分公司名字 * @return */public static Map<String, String> getBranchById(String branchId) {checkEmptyAndLoad();Map<String, String> branchMap = new HashMap<String, String>();if (HEAD_OFFICE.equals(branchId)) {branchMap.putAll(branchCache);// 总公司可看到全部分公司信息} else {branchMap.put(branchId + "", branchCache.get(branchId));}return branchMap;}public static void main(String[] args) {getAll();}}
这仅仅是cache的自定义缓存的办法 ,而今 cache用的越来越少 ,redis存储的功能已经达到可以覆盖cache缓存
但是对于小型的项目来说 cache还是比较中肯的 用起来也方便 ,当然大的项目还是推荐使用redis
这里仅仅针对缓存做一个简单的阐述,这样对于初学者来说,更加便于理解什么是缓存,已经存取值
阅读全文
0 0
- Cache缓存服务器 将查询比较频繁的信息放入缓存当中
- Mysql的查询缓存区query cache
- 把天气信息放入.net缓存中
- 缓存框架Ehcache,减少数据库频繁查询
- 查看chrome当中的缓存
- 缓存的使用Cache
- Cache缓存的概念
- MyBatis的缓存(Cache)
- Cache【缓存】的使用方法
- Spring Cache的缓存
- Hibernate 一级缓存、二级缓存、查询缓存比较
- [ecshop调试]ecshop 数据库查询缓存详解 有三种缓存,query_cache(数据库查询缓存)、static_cache(静态缓存)和cache(普通的缓存)
- 用程序证明c的getchar并未将回车放入缓存,放进去的是换行!
- 缓存ehcache cache对象的get(Object obj),get(Serializable key)取缓存信息
- 缓存cache
- 缓存 Cache
- 缓存 Cache
- 缓存--cache
- WebViewJavascriptBridge的使用和封装
- 对Promise中的resolve,reject,catch的理解
- 申请TexturePacker免费注册码(TP:XXXXXXXX)
- 《王者荣耀》技术总监复盘回炉历程
- ionic上拉刷新功能的demo
- Cache缓存服务器 将查询比较频繁的信息放入缓存当中
- struct大小计算
- java 操作ES 增删改查总结
- hdu1736
- $("#addLowForm").serialize()同时提交其它参数的写法
- eclipse下配置安装ssm图文教程
- 为啥写博客
- ruby元编程,基础入门概念理解
- man的使用总结