码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap缓存

时间:2015-08-03 19:20:01      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:缓存   并发   concurrenthashmap   

先写个前提,系统中用tag来唯一标识数据,比如我的tag是10010000060,那么我可以根据tag去查询这个tag所对应的实体,然后去查找这个实体所对应的实体属性字段,最后根据这些实体属性字段的不同值(也就是规则)去查询数据,这样前后台都可以做代码的重构,然而我在数据钻取的时候,也就是说这个数据链接这个用户可能会去点多次,所以应该考虑到访问数据库次数的问题,怎样才能把这种小的数据量去缓存起来,尽量少的访问数据库呢?这时我想到了本地缓存ConcurrentHashMap,然后再去做的时候发现了问题,在初始化的时候,不能在类加载的时候的去初始化,那样就起不到缓存的作用了,创建对象的地址不一样每次都是一个新对象,然后最后做的是在用户登录的时候去初始化这个对象,

而且不用考虑多线程并发读取的问题,完全支持多个读操作进行


final Map<String, Object> cache = new ConcurrentHashMap<String, Object>();
session.setAttribute("cache", cache);

public ChartForPeopleBean getFieldTable(String entityTag) {
		//缓存已有的tag以及根据tag查询的数据
		HttpSession session = request.getSession();
		ConcurrentHashMap cache = (ConcurrentHashMap) session.getAttribute("cache");
		ChartForPeopleBean peopleBean = null;
		if(cache.containsValue(entityTag)){
			return (ChartForPeopleBean) cache.get("peopleBean");
		}else{
			peopleBean = topeopleservice.getFieldTable(entityTag);
		    cache.put("entityTag", entityTag);
		    cache.put("peopleBean", peopleBean);
		    return peopleBean;
		}
	}
这样就可以根据唯一标识去缓存数据


ConcurrentHashMap在高并发的情况下会很有效率,有机会需要去尝试,理解还比较肤浅,后续做深入研究


有什么问题或者不同意见的可以一起讨论。

版权声明:本文为博主原创文章,未经博主允许不得转载。

ConcurrentHashMap缓存

标签:缓存   并发   concurrenthashmap   

原文地址:http://blog.csdn.net/u013850857/article/details/47258439

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!