`

转:缓存类设计

    博客分类:
  • java
阅读更多

缓存是为了提高读取数据的效率,当客户端访问服务器时,首先检查一下缓存中是否有相同的请求信息,如有,则直接从缓存中读取,否则从数据库中读取,所以在设计缓存类时,他应该有一个获取数据的方法。

 CacheClassTest2.java

  1. package cn.itcast.thread;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import java.util.concurrent.locks.ReadWriteLock;  
  6. import java.util.concurrent.locks.ReentrantReadWriteLock;  
  7.   
  8.   
  9. public class CacheClassTest2<T> {  
  10.   
  11.     Map<String, T> cache = new HashMap<String, T>();  
  12.     ReadWriteLock rwLock = new ReentrantReadWriteLock();  
  13.     public T get(String key) {  
  14.         rwLock.readLock().lock();  
  15.         T value = cache.get(key);  
  16.         try {     
  17.             if (value == null) {  
  18.                     rwLock.readLock().unlock();  
  19.                     rwLock.writeLock().lock();  
  20.                     value = (T)"从数据库中读取数据";  
  21.                     cache.put(key, value);  
  22.                     rwLock.writeLock().unlock();  
  23.                     rwLock.readLock().lock();  
  24.                 }  
  25.         } finally {  
  26.             rwLock.readLock().unlock();  
  27.         }  
  28.         return value;  
  29.     }  
  30.   

 

在缓存类中可以存放的类型应该有多种,所以在这里使用类泛型,而且加上了读写锁,就是在读的时候不允许修改内容。

思考:在读写锁中,写锁是一定要释放的,不然就没有办法读了,然而读锁为什么在最后还要释放呢? 既然多个读锁是不互斥的,为什么在finally中还要将读锁解锁呢? 

 

个人认为:如果在这里不解锁也是可以的,而在没有锁的情况下,读是无阻塞的,将读锁释放,则是为了提高读取数据的效率。

分享到:
评论

相关推荐

    asp xml 缓存类

    1. 缓存类的概念:ASP中的缓存类是用来暂存数据,以避免频繁地从数据源(如数据库)中获取数据,从而提高程序性能。它在数据频繁变动但变动频率不高的情况下非常有用。 2. 缓存类的实现原理:该缓存类通过首先检查...

    ios 图片缓存类

    本项目提供的“ios 图片缓存类”旨在提供一个简单易用的解决方案,利用GCD(Grand Central Dispatch)进行图片的异步下载和缓存,从而提高应用性能和用户体验。以下将详细介绍该类库的关键知识点。 1. **图片缓存...

    java缓存设计代码

    根据提供的文件信息,我们可以深入分析该Java缓存设计代码中的关键知识点。 ### 一、类结构及作用 #### CacheManager 类 - **包名**: `lhm.hcy.guge.frameset.cache`,这表明该类属于一个较大的项目或框架的一部分...

    Android 数据缓存工具类

    本文将深入探讨Android数据缓存工具类的设计与实现,特别是针对JSON数据和字符串的缓存,并且会涉及过期时间管理,以确保数据的新鲜度。 首先,我们要理解数据缓存的基本原理。数据缓存是一种在本地存储常用数据的...

    iOS 缓存功能类

    "iOS 缓存功能类"是一个专门设计来处理iOS应用中字符串和图片缓存的小型、高效工具。下面将详细介绍这类缓存机制及其相关知识点。 一、缓存的基本概念与作用 缓存是一种临时存储常用数据的技术,其目的是减少对主...

    最新酷狗缓存转mp3工具

    【标题】"最新酷狗缓存转mp3工具"揭示了这个软件的主要功能,即它是一个专门用于将酷狗音乐的缓存文件转换为MP3格式的工具。酷狗音乐是中国流行的数字音乐服务平台,它允许用户在线播放和下载音乐。这款工具可能是...

    Python-一个简单小巧可定制化轻量级的基于内存的Python缓存组件

    标题中的“Python-一个简单小巧可定制化轻量级的基于内存的Python缓存组件”指的是一种Python库,它设计用于实现简单的内存缓存功能。这类组件在处理大量数据或者需要频繁读取已计算结果时特别有用,因为它可以减少...

    判断类的缓存大小

    ### 判断类的缓存大小 #### 概述 在Java编程语言中,类与对象之间的关系至关重要。本文将深入探讨如何通过Java内置的关键字`instanceof`以及类方法`isInstance(Object obj)`和`isAssignableFrom(Class&lt;?&gt; cls)`来...

    缓存技术详解

    ### 缓存技术详解 #### 一、缓存的基本概念及作用 缓存技术是一种用于提高...通过以上介绍可以看出,缓存技术在Web开发和移动开发中扮演着极其重要的角色,合理地设计和使用缓存可以极大地提高系统的性能和用户体验。

    基于模版方法的简单缓存功功能

    “基于模版方法的简单缓存功能”这一标题暗示了我们将讨论一个设计模式的应用,即模板方法模式,以及它如何被用来实现一个缓存系统。缓存是一种提升应用程序性能的技术,通过存储频繁访问的数据,减少对原始数据源的...

    行业分类-设备装置-基于多级缓存的数据读写方法、装置和计算机系统.zip

    6. **缓存的命中率和 miss率**:缓存性能的关键指标,通过优化缓存设计和算法,提高命中率,降低miss率,从而提升系统整体性能。 7. **数据对齐**:数据在内存中的位置对缓存性能有很大影响,对齐数据可以减少不必...

    ENCACHE缓存简介

    在实际使用Ehcache时,开发人员通常会借助`EHCacheUtil`这样的工具类来操作缓存,如`put(key, value)`方法用于添加缓存,`get(key)`方法用于获取缓存。此外,`ehcache.xml`配置文件用于定义缓存的详细设置,如大小、...

    java源码:分布式缓存框架 SwarmCache.zip

    1. 分布式系统设计:理解如何在多节点之间实现数据分布和一致性。 2. JGroups的使用:学习如何配置和使用JGroups进行节点通信和组管理。 3. 集群一致性算法:研究SwarmCache是如何保证缓存的一致性和可用性的。 4. ...

    c#缓存介绍.doc

    C# 中的缓存主要涉及到`System.Web.Caching`命名空间,这个命名空间包含了管理和操作缓存所需的所有类。 `System.Web.Caching`命名空间概览: 该命名空间是专门为Web应用程序设计的,尤其是B/S架构的项目。它的核心...

    php模板解析类文件缓存

    总结,PHP模板解析类如Smarty,通过解析模板、编译成PHP代码并缓存,实现了业务逻辑与视图的解耦,同时通过文件缓存提升了Web应用的响应速度。理解和熟练运用这些机制,对于提升PHP Web应用的性能至关重要。

    sp缓存list集合工具类

    在IT行业中,尤其是在Android开发领域,"sp缓存list集合工具类"是一个常见的概念,它涉及到数据存储和优化。SP通常指的是SharedPreferences,这是...通过合理的设计和实现,这个工具类能够成为优化应用性能的有效手段。

    capr:缓存市场数据协议

    1. **数据结构设计**:capr协议的C++实现通常会包含一系列的类和结构体,代表不同的市场数据类型,如报价(Quote)、订单(Order)等。这些数据结构设计遵循capr协议的数据格式,以实现高效的数据操作。 2. **序列化...

    12-缓存:数据库成为瓶颈后,动态数据的查询要如何加速?_For_group_share1

    在实际工作中,正确设计和使用缓存策略至关重要,包括选择合适的缓存淘汰策略、控制缓存大小、处理并发访问时的锁机制等。通过本课程,将深入学习缓存的定义、分类、优缺点以及如何在实际项目中有效利用缓存,以提升...

    ios-WebView离线缓存.zip

    它的设计简洁高效,适用于快速存储和检索数据。在WebView离线缓存的场景下,我们可以利用YYCache来存储网页的HTML、CSS、JavaScript等静态资源,以便在离线状态下重用这些资源,模拟在线浏览体验。 系统提供的...

    深入理解Kafka:核心设计与实践原理_朱忠华著_带目录.rar

    8. **性能优化**:Kafka具有高性能的特点,可以通过批处理、缓存和零拷贝等技术提高吞吐量和降低延迟。 9. **Kafka Streams**:Kafka提供的流处理库,允许开发人员直接在Kafka主题之间进行复杂的计算和转换,实现...

Global site tag (gtag.js) - Google Analytics