`
gdidffje
  • 浏览: 696 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

将ReadWriteLock应用于缓存设计

阅读更多

将ReadWriteLock应用于缓存设计

本文最早发表于BEA dev2dev

——针对缓慢变化的小数据的缓存实现模型

在JavaEEdev站点(http://www.javaeedev.com)的设计中,有几类数据是极少变化的,如ArticleCategory(文档分类),ResourceCategory(资源分类),Board(论坛版面)。在对应的DAO实现中,总是一次性取出所有的数据,例如:

1.List<ArticleCategory> getArticleCategories();

此类数据的特点是:数据量很小,读取非常频繁,变化却极慢(几天甚至几十天才变化一次),如果每次通过DAO从数据库获取数据,则增加了数据库服务器的压力。为了在不影响整个系统结构的情况下透明地缓存这些数据,可以在Facade一层通过Proxy模式配合ReadWriteLock实现缓存,而客户端和后台的DAO数据访问对象都不受影响:

首先,现有的中间层是由Facade接口和一个FacadeImpl具体实现构成的。对ArticleCategory的相关操作在FacadeImpl中实现如下:

01.public class FacadeImpl implements Facade {
02.protected CategoryDao categoryDao;
03.public void setCategoryDao(CategoryDao categoryDao) {
04.this.categoryDao = categoryDao;
05.}
06.// 读操作:
07.public ArticleCategory queryArticleCategory(Serializable id) {
08.return categoryDao.queryArticleCategory(id);
09.}
10.// 读操作:
11.public List<ArticleCategory> queryArticleCategories() {
12.return categoryDao.queryArticleCategories();
13.}
14.// 写操作:
15.public void createArticleCategory(ArticleCategory category) {
16.categoryDao.create(category);
17.}
18.margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !im
分享到:
评论

相关推荐

    JAVA缓存技术深入了解

    此外,我们还需要考虑缓存的并发控制,如`ReadWriteLock`、`StampedLock`等,以及缓存穿透、缓存雪崩和缓存击穿等问题,这些问题在设计缓存时都需要进行预防和处理。 最后,对于大型系统,监控和度量缓存性能也至关...

    23 按需上锁—ReadWriteLock详解.pdf

    在实际应用中,ReadWriteLock常用于数据库连接池、缓存等读多写少的场景。需要注意的是,使用ReadWriteLock时,正确地管理和释放锁至关重要,避免出现死锁或资源泄漏的问题。此外,为了评估ReadWriteLock对性能的...

    MyBatis缓存机制深度解剖[收集].pdf

    一级缓存是基于PerpetualCache的HashMap本地缓存,它的存储范围局限于Session。这意味着在一次Session中,如果相同的查询被执行多次,MyBatis会从缓存中获取结果,而不是每次都去数据库查询。然而,当Session被flush...

    实战Java高并发程序设计模式

    本篇文章将深入探讨相关知识点,包括并发基础、线程安全、同步机制、并发设计模式以及性能优化策略。 1. 并发基础:并发是指多个执行单元(如线程或进程)在同一时间段内执行,但并不意味着它们是并行的。在单核CPU...

    Java LocalCache 本地缓存的实现实例

    Java LocalCache 本地缓存的实现实例主要应用于Java应用中,对于访问频率高,更新少的数据,通常的方案是将这类数据加入缓存中。相对从数据库中读取来说,读缓存效率会有很大提升。在集群环境下,常用的分布式缓存有...

    面试点总结.zip各种面试题

    面试时可能会考察如何设计缓存策略、缓存穿透、缓存雪崩和缓存更新策略等问题。 【锁】 在多线程环境下,锁用于控制并发访问共享资源,确保数据的一致性。Java提供了多种锁机制,如synchronized关键字、...

    美团系统交易面试资料整理.zip

    《美团系统交易面试知识点详解》 在IT行业中,面试是检验技术能力的重要环节,特别是对于美团这样的大型互联网公司,其...通过深入学习和实践这些知识点,将有助于提升面试表现,从而在竞争激烈的IT行业中脱颖而出。

    Java工程师技能图谱.pdf

    8. 缓存技术:包括缓存的应用场景,缓存加载策略与失效策略,缓存与数据库同步等,以及缓存预热、缓存失效、缓存击穿、缓存雪崩、多级缓存、缓存与Spring+ORM框架集成等。 9. 消息队列技术:需要掌握消息队列的基本...

    Java核心知识点整理.rar

    - 23种设计模式:单例、工厂、观察者、装饰者、适配器、代理等模式的理解与应用。 8. **算法** - 常见算法:排序(冒泡、插入、选择、快速、归并等)、查找、图论、动态规划等。 - 空间复杂度与时间复杂度分析:...

    8、读写锁ReentrantReadWriteLock&StampLock详解.pdf

    根据提供的文件信息,本文将详细解析读写锁`ReentrantReadWriteLock`以及`StampLock`在Java并发编程中的应用场景及其实现原理。 ### 一、读写锁介绍 #### 1.1 读写锁的基本概念 读写锁是一种特殊的锁机制,它可以...

    互联网架构面试题

    - Java中的线程同步机制:synchronized、Lock(ReentrantLock、ReadWriteLock)、信号量Semaphore等,理解它们的原理和应用场景。 - 线程池的使用,如ExecutorService、ThreadPoolExecutor,如何合理设置核心线程...

    一些面试题【Java后端】

    Java后端面试题涵盖了许多核心领域,包括但不限于基础语法、面向对象编程、集合框架、多线程、JVM内存管理、网络编程、数据库操作、设计模式以及...深入理解和实践这些知识点将有助于提升你在Java后端领域的专业素养。

    高性能java系统实现与调优

    - **垂直拆分**:根据业务需求将应用和服务划分为多个独立的部分。 #### 设计模式与实践 - **单例模式**:对于频繁使用的大对象,采用单例模式减少对象创建和销毁的成本。 - **代理模式**:实现延迟加载、远程调用...

    本仓库用于分享互联网大厂高频面试题、Java核心知识总结

    - MyBatis缓存:一级缓存、二级缓存的原理和配置。 - MyBatis Plus:提供更简洁的CRUD操作,简化开发。 6. **Redis**: - 数据类型:字符串、列表、集合、哈希、有序集合等。 - 主从复制:实现数据备份和高可用...

    java并发编程库

    J.U.C的API结构设计非常精妙,它不仅提供了丰富的并发工具,还提供了一套流畅的API设计,使得开发者能够容易地将这些工具组合使用。例如,通过Executor框架,开发者可以非常容易地创建出各种不同类型的线程池,用于...

    秒杀系统练习

    5. **队列设计**:引入消息队列(如RabbitMQ、Kafka),将大量请求异步化处理,缓解服务器压力,避免瞬间高并发对系统造成冲击。同时,消息队列能实现流量削峰填谷,保证系统稳定。 6. **分布式Id生成**:秒杀场景...

    java面试宝典

    Java面试宝典主要涵盖了许多Java开发者在面试过程中可能会遇到的核心知识点。这包括但不限于语言基础、数据结构与算法、集合框架、多线程、异常处理、IO...通过系统地学习和实践这些知识,将有助于你在面试中脱颖而出。

    高性能阻塞队列的数据结构创新.pptx

    阻塞队列广泛应用于各种并发场景中,如任务调度、消息传递、资源管理等。通过合理利用阻塞队列,可以有效提高系统的并发性能和资源利用率。 #### 二、传统阻塞队列的性能瓶颈 1. **同步机制的效率瓶颈**: - 传统...

Global site tag (gtag.js) - Google Analytics