缓存池的设计与使用
关键字:缓存管理、缓存池、缓存策略、缓存项、线程池
一、需求
在公司的门户支撑平台开发过程中使用简单的静态Map来缓存数据已经难以满足需求,需要对缓存的数据进行策略化的管理以及相应的界面维护操作。缓存数据可大致分为两种类型:
Ø 有键值的缓存数据,也就是缓存的数据项有一个唯一的标识值,类似门户结构、各种模板。
Ø 无键值的缓存数据,类似数据库连接池,线程池等。
以下为需求用例图:
二、目标
1) 用户可以快速访问频繁使用的数据
2) 将缓存中类型类似的对象进行组合(分池缓存)。
3) 提供可配置的缓存策略管理,以便可以通过界面操作而不是编码方式修改参数。
4) 提供可扩展的框架,以便以后可以转换到其它第三方的缓存API。(例如:ehcache)
5) 可以生成统计数据来监测缓存的效率,以及使用数据缓存后应用性能的提升效果。
三、设计核心类图
四、缓存策略维护
一般来说缓存策略配置文件需要在项目开发过程中使用到缓存时配置好,项目发布后还可在界面上维护策略信息(见图表一)。
Code:缓存池的唯一标识 (必须)
Name:缓存池的名称 (必须)
以下的可选:
poolCollectionClass:缓存池类型,IPool接口的某个实现类,目前提供了SimplePool,ObjectPool,ReusablePool,ThreadPool几种缓存池实现类。
poolClass:缓存池容器类。
PoolSize:缓存池阀值
Cyclelife:缓存项生命周期
InterruptTime:请求中断时间
Disabled:缓存池是否启用
Visible:是否在管理界面上显示
cacheLoader:缓存池加载器
arithmeticClass:缓存池算法器
五、界面操作
每个缓存策略对象左边树上的一个节点,双击可查看该缓存策略的详细配置,以及生成的缓存池中缓存情况。
右键点击缓存项,可以查看该缓存项内容或者刷新该缓存项。
图表 1
六、缓存池使用
缓存策略中配置的生成多个缓存池统一由CachePoolManager 类管理。可以根据某个缓存策略的code值取到对应的缓存池。
如:IPool pool = CachePoolManager. getInstance().getCachePool(“portal_tree”)获取到的事门户的缓存池。
获取缓存项:
如果缓存项有唯一标识的值,例如已知门户对象key值为:12_41,则可通过如下获取:
CacheItem item = pool.getObject(“12_41”);
PortalNode portal = (PortalNode)item.getValue();
如果缓存池是类似数据库链接池,只需任意取出池中的某个元素即可,则可通过如下获取:
Cacheable item = pool.checkOut();
Connection conn = (Connection)item.getValue();
获取缓存项的时序图如下所示:
七、线程池的使用
线程池的实现比较特殊,线程池中创建了一批工作线程,以及一个工作队列。如果工作队列中没有工作任务(工作队列为空),则池中所有的工作线程处于休眠等待状态。如果往工作队列中加入了工作任务,则工作队列会唤醒工作线程执行新加入的工作任务。任务执行完毕后工作线程重新进入休眠等待状态。
线程池单独实现了IThreadPool接口,该接口包含了两个方法:
/**
* 执行一次性的非任务池中check-out的任务,一般都是临时new 出来的,执行完后不回收。
* @param o
*/
void excute(IAssignment task);
/**
* 执行由任务池中check-out的任务缓存项,执行完后由任务池pool引用回收任务。
* @param pool
* @param o
*/
void excute(IPool pool, Cacheable o);
|
根据接口定义我们可以知道需要交给线程池中工作线程处理的任务都需要实现 IAssignment 接口。
- 大小: 6.1 KB
- 大小: 20.5 KB
- 大小: 30.2 KB
分享到:
- 2007-09-24 23:20
- 浏览 3949
- 评论(0)
- 论坛回复 / 浏览 (0 / 8136)
- 查看更多
相关推荐
java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。
缓存池的概念和应用 缓存池是数据库管理系统(DBMS)中的一种缓存机制,它存在于内存中,...缓存池是数据库管理系统中的一种重要机制,它可以大大提升数据库的性能,但需要合理地设计和实现缓存池的控制和优化策略。
本篇将深入探讨对象缓存池的AS3实现,以及与之相关的工厂方法。 首先,让我们了解对象池的概念。对象池是一种内存管理策略,它预先创建并维护一组对象,当程序需要对象时,可以从池中获取,而不是每次都在运行时...
主要介绍了Android中的Bitmap缓存池使用详解,本文主要目的是讲解如何使用缓存来提高UI的载入输入和滑动的流畅性,需要的朋友可以参考下
Redis缓存设计与性能优化是确保系统高效运行的关键环节。本文主要探讨了以下几个核心知识点: 1. **缓存穿透**:缓存穿透是指查询一个不存在的数据,导致缓存层和存储层都无法命中,从而增加了存储层的压力。为解决...
- **LRU(Least Recently Used)算法**:这是一种常用的缓存淘汰策略,当缓存空间不足时,会选择最近最少使用的条目进行替换。通过双向链表实现LRU算法,每次访问一个缓存条目时,都会将其移动到链表头部;当需要...
6. **缓存池与缓式加载**:缓存池用于存储长期或频繁使用的对象,以减少频繁的创建和销毁操作;缓式加载则在需要时才加载资源,降低启动时的内存占用,提升用户体验。 7. **线程安全**:在多线程环境中,对象池管理...
本文将深入讲解如何使用Java实现一个简单的缓存池,并通过一个具体的代码实例来阐述其工作原理。 首先,我们来看缓存实体类(CacheItem)。这个类是用来存储缓存数据的容器,包含以下关键属性和方法: 1. `...
#### 五、缓存指令与缓存池的概念 - **缓存指令**:定义了需要缓存的路径(文件或目录),并可以指定缓存副本因子、有效期等参数。副本因子决定了要缓存的块的副本数量,如果多个指令指向同一个文件,则采用最大的...
缓存和连接池是数据库管理和优化中的两个关键概念,它们都是为了提高系统性能和效率而设计的。 首先,缓存是一种技术,它通过将经常访问的数据存储在快速访问的内存中,减少了对慢速存储设备(如硬盘)的依赖。在...
【易语言电脑缓存清理助手源码】是一个使用易语言编程开发的软件,旨在帮助用户快速清理计算机中的缓存垃圾,提升系统运行效率。易语言是中国本土开发的一种面向对象的、可视化的编程语言,它的特点是语法简洁,适合...
本文将深入探讨缓存架构的设计与应用,帮助读者更好地理解和运用缓存技术。 首先,缓存可以在多个层次上实现,包括浏览器缓存、代理缓存和服务器端缓存等。浏览器缓存主要通过设置HTTP响应头中的`Cache-Control`...
当强引用的超额时,将最后使用的资源放入软引用缓存中,使用到软引用的资源时 ,则将资源重新放回强引用缓存池中。 2,内存缓存池中找不到,就去文件中查找, 3,再找不到就只好去网络上下载了,下载到以后,...
在Java应用程序中,使用JDBC(Java Database Connectivity)与Oracle数据库交互时,通过连接池可以有效地管理和复用数据库连接,减少每次建立和关闭连接带来的开销。 JDBC连接池的基本原理是预先创建一组数据库连接...
当计算任务消耗大量CPU资源,或者数据库连接池繁忙时,使用缓存可以有效提升系统性能。同时,通过缓存可以提升读取速度,增强系统扩展能力,并降低存储成本。 3. **缓存的基本原理** 缓存策略主要有懒汉式(读时...
这样设计的目的在于尽可能减少对主内存的访问,同时利用不同级别缓存的容量与速度平衡。 在Web开发中,双缓存技术通常应用于服务器端和客户端两方面。在服务器端,例如在Java应用服务器中,可以使用如Ehcache这样的...
下面将详细介绍如何在Java中使用Redis缓存,特别是针对Map、List和Set的使用实例。 首先,你需要在项目中引入Jedis的依赖,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>redis....
Ehcache则是一个广泛使用的Java缓存框架,它能够提升应用程序的响应速度,减少对数据库的访问,从而提高系统性能。这两者的整合,可以帮助我们构建出一个更加优化的Spring应用。 首先, BoneCP连接池的核心特性包括...
利用分布式缓存系统的高可用架构设计,如使用集群、副本等技术来提高系统的容错性;以及采用先进的加密技术和访问控制策略来增强数据安全性。 分布式缓存技术的发展还处在不断进步中,它在云计算环境下的应用前景...