`
hiwings
  • 浏览: 59794 次
  • 性别: 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中,高速缓存的实现通常依赖于数据结构如哈希表(HashMap)或并发容器如ConcurrentHashMap。哈希表提供快速的查找和插入操作,而ConcurrentHashMap则为多线程环境提供了线程安全的访问。在这个项目中,对比了...

    java缓存工具 SimpleCache_java_缓存_

    Java 缓存工具 SimpleCache 是一个用于在 Java 应用程序中实现高效数据存储和检索的框架。在高并发和大数据量的场景下,缓存是提高系统性能的关键技术之一。SimpleCache 提供了一种简洁的方式来管理短期数据,避免了...

    Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步

    本项目实现了一个基于Java的对象缓存系统,其中包含了LRU(Least Recently Used)算法,以及支持集群同步功能。这里我们将深入探讨相关知识点。 **LRU算法** LRU是一种常用的页面替换算法,其核心思想是:当内存...

    JAVA_WEB_缓存技术

    在这个场景中,我们看到两个核心类:`CacheData` 和 `CacheOperation`,它们共同实现了基础的缓存功能。 `CacheData` 类是用于存储缓存数据的bean,包含三个主要属性: 1. `data`: 存放实际的缓存内容,可以是任何...

    缓存机制(Jive缓存机制的实现)

    ### Jive缓存机制的实现 #### 一、引言 Jive作为一款经典的开源论坛系统,凭借其灵活的设计架构和强大的功能,在Java开发者社区中享有极高的声誉。本文将重点探讨Jive缓存机制的设计与实现,尤其关注其如何通过...

    基于SSM框架,通过spring注解的方式,实现redis的数据缓存机制,将mysql的数据缓存到redis数据库.zip

    本项目主题聚焦于“基于SSM框架,通过spring注解的方式,实现redis的数据缓存机制,将mysql的数据缓存到redis数据库”,这涉及到Java开发中的多个核心技术。首先,我们来逐一解析这些知识点。 **1. SSM框架** SSM...

    Java缓存框架 EhCache

    7. **扩展性**:EhCache支持插件机制,可以通过添加不同插件来实现更高级的功能,如缓存监控、统计分析等。 在`ehcache-core-2.4.5`这个版本中,包含了EhCache的核心库,提供了基础的缓存管理功能。开发者可以通过...

    使用google guava 实现定时缓存功能

    综上所述,Google Guava的定时缓存功能使得我们能够轻松地在Java应用中实现高效的缓存机制,有效减少计算和网络请求的负担,提升整体性能。通过灵活的配置和丰富的API,我们可以根据具体需求定制合适的缓存策略。在...

    Java缓存技术

    - **简介**:Memcached是一个高性能、分布式的内存对象缓存系统,旨在通过将数据缓存在内存中来减轻数据库的负担。 - **工作原理**:当客户端发起请求时,Memcached首先检查请求的数据是否已存在于缓存中。如果...

    Java并发机制的底层实现原理.pdf

    由于现代计算机架构中,每个CPU核心都有自己的本地缓存,而主内存中的数据可能与本地缓存中的数据不一致,这就产生了线程安全问题。Java虚拟机(JVM)通过内存模型来解决这个问题,确保当一个线程修改了共享变量后,...

    高效Java后台程序缓存用户信息的研究.pdf

    HttpServetRequest对象缓存数据的核心思想是在用户请求到达服务器时,将用户信息作为属性保存在ServletRequest对象中。由于在同一个请求中,多个servlet可以通过request对象共享数据,这使得用户信息在整个请求链中...

    java缓存工具 SimpleCache

    在Java世界里,缓存机制是一个重要的设计模式,广泛应用于各种场景,如Web应用、大数据处理、分布式系统等。 `SimpleCache`的设计思想简洁易用,通常由一个Key-Value结构组成,其中Key用于标识存储的数据,Value则...

    spring缓存机制-自定义缓存(五, 六)

    Spring 缓存机制是Spring框架中的一个重要特性,它允许开发者在应用程序中轻松地实现缓存功能,从而提高性能,减少数据库的访问压力。在“spring缓存机制-自定义缓存(五, 六)”中,我们将深入探讨如何扩展Spring的...

    一个基于ajax和java缓存的聊天室

    "一个基于Ajax和Java缓存的聊天室"这个标题揭示了该项目的核心技术栈,即使用Ajax进行实时通信,以及Java作为后端处理数据并实现缓存功能,构建了一个在线聊天平台。Ajax(Asynchronous JavaScript and XML)是一种...

    Java岗面试核心MCA版.pdf

    Java岗面试核心MCA版.pdf Java基础知识点 1. Java概述:Java是一种面向对象的编程语言,具有跨平台性, Java程序可以在任何支持Java的平台上运行。 2. 什么是Java?Java是一种高级的编程语言,能够开发出独立...

    利用缓存机制快速读取XML文件数据

    ### 缓存机制在XML文件数据读取中的应用 #### 一、背景介绍与问题提出 在现代软件开发中,XML(可扩展标记语言)作为一种轻量级的数据存储和交换格式,广泛应用于不同系统间的数据交换及配置文件的管理。然而,当...

    Android LRUCache机制 缓存机制

    - **数据缓存**:对于频繁读取数据库的数据查询结果,使用LRUCache可以在内存中缓存这些结果,减少数据库的访问次数,提高响应速度。 - **网络请求结果缓存**:对于网络请求的结果,可以将其缓存在LRUCache中,避免...

    DelayQueue延迟队列和Redis缓存实现订单自动取消功能

    DelayQueue的核心接口是`java.util.concurrent.Delayed`,实现这个接口的类需要提供一个`getDelay(TimeUnit unit)`方法来返回元素还需要等待多久才能被处理。当这个延迟时间到达零时,元素才可从队列中取出。在订单...

    自定缓存, 在查询修改频率较少的数据,存入缓存中,有帮助提高效率

    本文将深入探讨如何实现一个自定义缓存,并结合提供的`MyCacheManager.java`文件,分析其核心功能和设计原理。 首先,让我们理解缓存的基本概念。缓存是一种存储技术,用于临时存储频繁访问的数据,以便下次请求时...

Global site tag (gtag.js) - Google Analytics