`
hiwings
  • 浏览: 58001 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java数据缓存实现的核心机制

 
阅读更多

java数据缓存实现的核心机制

一、在大数据量访问读取中,数据缓存是最普遍采用的解决方案之一,但在读过很多代码的缓存实现,代码可圈可点的弹性都很大,在一并发数不多时,功能是完全没有问题的,但是对大数量的多并发操作上就有些差强人意了。以下为集数家之长实现的数据缓存核心机制代码片段,以抛砖引玉,供大家学习,此片段的核心代码参考sun的源码实现。sun没有对此段代码开放,它的功能在ArrayBlockingQueue(jdk1.5)中已经实现并提供开放接口。没有时间看下面的代码的可直接查看ArrayBlockingQueue的api,如果对象ArrayBlockingQueue也没有兴趣的同学,可以直接调用ConcurrentHashMap(jdk1.5), ConcurrentSkipListMap(jdk1.6),这些类,api中有更加祥细的说明,这里不多说,需要注意的是因为此功能解决多线程并发问题,故null不能做为key和value的键值,可以理解为HashTable的提升。

package com.henry;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class CacheDataTest {
 static Map<Integer,Object> dataMap=new HashMap<Integer,Object>();
 static ReadWriteLock lock=new ReentrantReadWriteLock();//创建读写锁的实例
 static Object getData(Integer key){
  lock.readLock().lock();//读取前先上锁
  Object val=null;
  try{
   val=dataMap.get(key);
   if(val == null){
    // Must release read lock before acquiring write lock
    lock.readLock().unlock();
    lock.writeLock().lock();
    try{      if(val==null){
      //dataMap.put(key, "");//query from db
      val=queryDataFromDB(key);     }finally{
     //Downgrade by acquiring read lock before releasing write lock
     lock.readLock().lock();
     // Unlock write, still hold read
     lock.writeLock().unlock();    }
  }finally{
   lock.readLock().unlock();//最后一定不要忘记释放锁   System.out.println("get data key="+key+">val="+val);
  return val;  
 static Object queryDataFromDB(Integer key){
  Object val=new Random().nextInt(1000);
  dataMap.put(key, val);
  System.out.println("write into data key="+key+">val="+val);
  return val;
 }

 
 public static void main(String[] args) {
  for(int i=0;i<10;i++){
   new Thread(new Runnable(){public void run() {
    getData(new Random().nextInt(5));
   }}).start();  }
}

分享到:
评论

相关推荐

    Java数据编程指南

    J2EE通信 通信概述 JMS的详细情况 消息驱动EJB 小结 第24章 Java数据对象(JDO) 概述 JDO对象模型 JDO API JDO实例的生命周期 JDO和EJB 开发可持久类 范例应用程序 配置FFJ...

    高效Java数据访问组件Uncode-DAL全功能源码

    该组件支持多数据源配置,能够实现读写分离、主备切换、故障转移以及自动恢复机制,同时集成负载均衡和缓存策略,大幅提升数据处理性能和系统稳定性。 技术构成: - 主要编程语言:Java - 文件构成:共213个文件,...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java基本数据类型 string和包装类 final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解...

    Java思维导图xmind文件+导出图片

    基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读 Dubbo 使用Dubbo对单一应用服务化改造 ...

    java项目源码之UrlRewriter Java v2.0 RC1-urlrewriterjava.rar

    UrlRewriter Java v2.0 RC1 是一个基于 Java 的 URL 重写工具,旨在帮助开发人员实现灵活的 URL 重定向和重写功能。以下是该工具的主要实现描述: ...实现重写规则的缓存机制,减少重复解析配置文

    涵盖了 Java 基础、集合、源码、并发、虚拟机、框架、数据库、网络编程、设计模式、新特性和数据结构等多个知识领域的面试突击

    Java基础知识:数据类型、关键字、面向对象、集合框架、异常处理等 Java核心技术:I/O、多线程、网络编程、反射、泛型等 Java虚拟机:内存模型、垃圾收集器、类加载机制等 Java企业级开发:Spring、Hibernate、MyBatis等...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题79:redis数据淘汰机制.mp4 │ Java面试题80:java访问redis级redis集群?.mp4 │ Java面试题81:微信公众号分类和微信开发原理.mp4 │ Java面试题82:怎么把微信和业务平台进行绑定.mp4 │ Java面试题...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    Impale底层采用C++实现,而非Hadoop的基于Java的Map- Reduce机制,将性能提高了1-2个数量级。而Spark SQL提供很好的性能并且与Shark、Hive兼容。提供了对结构化数据的简便的narrow- waist操作,为高级的数据分析统一...

    JAVA中级书籍

    3、熟练掌握目前流行开源框架(spring/springmvc/ibatis),并且对其核心思想、实现原理有一定认知;开源框架:spring;hibernate。 4、熟悉Oracle、MySQL等数据库开发与设计以及缓存系统Redis或 Memcached的设计和...

    达内java培训目录

    JavaSE核心 异常处理、多线程基础、IO系统、网络编程、Java反射机制、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性 熟练掌握JavaSE核心内容,特别是IO和多线程;...

    Java核心技术II(第8版)

    4.7.1 被缓存的行集 4.8 元数据 4.9 事务 4.9.1 保存点 4.9.2 批量更新 4.9.3 高级SQL类型 4.10 Web与企业应用中的连接管理 4.11 LDAP介绍 4.11.1 配置LDAP服务器 4.11.2 访问LDAP目录信息 第五章 国际化 5.1 ...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Java后端开发+Java中级面试题

    准备面试Java开发岗位?不要担心!我们为您准备了一份精心策划的Java面试题广告!无论您是初级开发者还是经验丰富的...这些题目涵盖了Java开发中的核心概念和常见问题,帮助您准备面试。祝您面试成功,取得理想的职位!

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    附有面试讲解视频,不是网盘,下载既有视频,屡试不爽的面试宝典。 Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 ...Java面试题79:redis数据淘汰机制 Java面试题80:java访问redis级redis集群 ......

    Java常见面试题208道.docx

    121.说一下 hibernate 的缓存机制? 122.hibernate 对象有哪些状态? 123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么? 124.hibernate 实体类必须要有无参构造函数吗?为什么? 十三、Mybatis ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.2.2 脏检查及清理缓存的机制  8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  ...

    开涛高可用高并发-亿级流量核心技术

    5.9.1 熔断机制实现 108 5.9.2 配置示例 112 5.9.3 采样统计 113 6 超时与重试机制 117 6.1 简介 117 6.2 代理层超时与重试 119 6.2.1 Nginx 119 6.2.2 Twemproxy 126 6.3 Web容器超时 127 6.4 中间件客户端超时与重...

    Java Web程序设计教程

    &lt;&lt;Java Web程序设计教程.pdf&gt;&gt;人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象...

Global site tag (gtag.js) - Google Analytics