ConcurrentHashMap缓存
2015-08-03 16:58
183 查看
先写个前提,系统中用tag来唯一标识数据,比如我的tag是10010000060,那么我可以根据tag去查询这个tag所对应的实体,然后去查找这个实体所对应的实体属性字段,最后根据这些实体属性字段的不同值(也就是规则)去查询数据,这样前后台都可以做代码的重构,然而我在数据钻取的时候,也就是说这个数据链接这个用户可能会去点多次,所以应该考虑到访问数据库次数的问题,怎样才能把这种小的数据量去缓存起来,尽量少的访问数据库呢?这时我想到了本地缓存ConcurrentHashMap,然后再去做的时候发现了问题,在初始化的时候,不能在类加载的时候的去初始化,那样就起不到缓存的作用了,创建对象的地址不一样每次都是一个新对象,然后最后做的是在用户登录的时候去初始化这个对象,
而且不用考虑多线程并发读取的问题,完全支持多个读操作进行
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在高并发的情况下会很有效率,有机会需要去尝试,理解还比较肤浅,后续做深入研究
有什么问题或者不同意见的可以一起讨论。
相关文章推荐
- JavaScript之验证提醒【升级版,高大上】
- C++中的堆和栈
- log4j 配置文件 详解 + 实例 分析
- OSAL函数分析-osal_start_reload_timer,osalAddTimer,osalFindTimer
- C++学习笔记 C与C++部分对照
- 面试题总结9
- iOS开发 字符串过滤html标签
- 虚函数和纯虚函数的区别
- HDU-1556-Color the ball-线段树+区间更新+单点查询
- Activity,Fragment中onSaveInstanceState(Bundle outState)的调用时机
- 【Android】开机自启动Service
- 【Android】Service学习之本地服务
- fzu1752 A^BmodC
- 深入 char * ,char ** ,char a[ ] ,char *a[] 内核
- 封装的含义
- IOS视图位置可能变化解决问题
- windows2008 c盘清理
- I - Strategic Game - hdu 1054(最小点覆盖)
- ASP.NET MVC Cookie 身份验证
- Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)