缓存池的设计与使用
关键字:缓存管理、缓存池、缓存策略、缓存项、线程池
一、需求
在公司的门户支撑平台开发过程中使用简单的静态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
- 浏览 3892
- 评论(0)
- 论坛回复 / 浏览 (0 / 8116)
- 查看更多
相关推荐
java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。
最后,提供了Redis键值设计和性能优化的实用建议,如合理的key名设计、避免bigkey、选择合适的数据类型,以及客户端连接池使用优化。这些内容对于提升Redis应用性能、保障系统稳定性具有重要意义。
主要介绍了Android中的Bitmap缓存池使用详解,本文主要目的是讲解如何使用缓存来提高UI的载入输入和滑动的流畅性,需要的朋友可以参考下
当强引用的超额时,将最后使用的资源放入软引用缓存中,使用到软引用的资源时 ,则将资源重新放回强引用缓存池中。 2,内存缓存池中找不到,就去文件中查找, 3,再找不到就只好去网络上下载了,下载到以后,...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...基于SSM框架实现的高并发商品秒杀系统源码+项目说明(c3p0作为连接池,Redis为缓存实现高并发 ,同时通过MySQL优化降低了网络延迟与GC的影响).zip
Jive是一个广受欢迎的开放...从设计细节上看,它采用了很多先进的设计思想和方法,如XML读写配置文件、数据库的缓存和连接池、帖子的过滤和TreeWalk遍历等,使得程序更加强健和高效。本文主要谈的是Jive缓存机制的实现
std::allocator 是 C++标准库中提供的默认分配器,他的特点就在于我们在 使用 new 来申请内存构造新对象的时候,势必要调用类对象的默认构造函数 ...所以为了让代码直接可用,我们同样应该在内存池中设计同样的接口:
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的...基于SSM框架实现的高并发商品秒杀系统源码+项目说明(c3p0作为连接池,Redis为缓存实现高并发 ,同时通过MySQL优化降低了网络延迟与GC的影响).zip
设计模式使用 事物、回滚使用 docker、nginx使用 图片服务器OSS使用 stram、lambda使用 多线程、线程池使用 定时任务使用 短信验证、邮件服务使用 JWT验证TOKEN令牌使用 雪花算法分布式算法使用 拦截器、Log4j日志...
此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。 ...
基于C 语言的通用数据库池服务,分为客户端动态库和服务端池服务, 支持 oracle db2 mysql postgres dameng gbase 等, 内部支持odbc/ado/oci/pqlib/gci/mysqlcapi 等...通用数据库代理服务池__ 服务端配置与运行.docx
使用数据库连接池解决了频繁创建连接带来的性能问题,后面又使用线程池提升了并行查询数据库的性能。 如何通过主从分离和一主多从部署抵抗增加的数据库流量的,你除了掌握主从复制的技术之外,还需要了解主从分离会...
一种半成品电芯的上料设备,用于手机锂电池自动生产线上料&检测工序,搭载板框上料与空板框自动回传模组,三轴龙门机械手夹取电芯模组,电芯翻转模组,联动搬运模组,电芯测试模组,扫码枪基站,不良排出与缓存模组...
Java高并发高性能分布式框架从无到有微服务架构设计 Java高并发高性能分布式框架从无到有微服务架构设计 微服务架构模式(Microservice Architect Pattern)。近两年在服务的疯狂增长与云计算技术的进步,让微服务...
xxx系统力技术架构与平台设计 java系统软件技术架构设计方案全文共3页,当前为第1页。 java系统软件技术架构设计方案全文共3页,当前为第1页。 一、 设计理念 "既要创造客户价值,又要提供良好的用户体验"是xxxx公司...
> 为了`提高`数据库(关系型数据库)的访问`瓶颈`,除在服务器端添加缓存服务器缓存常用的数据,还可添加连接池来提高服务器访问效率 连接池主要用于`网络服务器端`,用于同时接受`多个用户端`请求,数据库与数据库...
并使用Ehcache作为项目的缓存,druid作为项目的数据库连接池,使用FreeMarker实现word的导出,使用Shiro完成项目的登录认证,数据库使用的则是MySQL。 该系统可以分为三类角色:学生,教师,教务管理员。 该系统前端...
并使用Ehcache作为项目的缓存,druid作为项目的数据库连接池,使用FreeMarker实现word的导出,使用Shiro完成项目的登录认证,数据库使用的则是MySQL。 该系统可以分为三类角色:学生,教师,教务管理员。 该系统...