Cache实战之牛刀小试

原创 2011年01月09日 21:48:00

上个星期,公司一个项目中出现一个性能问题,问题是在并发50个用户的情况下有些API调用会很慢,其实最终的原因是由于后台的C库不是线程安全的,所以我们在Java中用JNI调用的时候使用了同步方法,这些同步方法导致性能在并发情况下急剧下降。

周末回到家,想了一下,如果后台的库不能解决线程安全问题,那就只能在前台解决了。分析了一下开发,发现大部分API调用都是查询方法,所以我想起来可以使用Cache类减缓这种压力。

下面是在使用Cache之前,大体代码结构:

Job.java一个作业类,描述基本作业性息。

 

 

JobService.java一个作用服务接口,描述提供给前台使用的一些方法,这里为了方便只提供了三个方法,两个更新方法,一个查询方法。

 

 

JobServiceImplWithoutCache.java一个没用使用Cache的JobService接口实现类。

 

 

JobServiceImplWithCache.java一个使用ehcache作为缓冲机制的JobService接口实现类。这里只做测试用,所以没有负责最终CacheManager的清理工作,生产环境下应该提供一个CacheManager的封装来管理所有的缓存。

这里需要注意的是Cache对象的创建,其中最后两个参数5和2分别表示

timeToLiveSeconds - the default amount of time to live for an element from its creation date

timeToIdleSeconds - the default amount of time to live for an element from its last accessed or modified date

另外注意在submit和kill方法里,都对cache做了同步更新的操作,从而保证每次getJobs取的数据都是最新的。

 

 

BackendJobManager.java是用来模拟后台JNI代码的,其中三个方法都是同步方法,并且在getJobs()方法里故意sleep(1000)来模拟后台API调用开销。

 

 

Test.java测试类,分不使用Cache和使用Cache两种情况进行测试。其中测试中模拟了50-100个线程来进行并发测试,从结果看效果还是一幕了然的。对于使用Cache的情况,如果并发的更新操作越少,并发查询的效果越好,因此使用Cache在大量查询的应用中还是有比较大的用处的。

 

 

这里只是一个简单的Cache使用的列子,其实如果项目中已经使用了spring的话,spring已经对各种主流的Cache框架做了集成,并且用起来也都是通过配置的方式来做的,这样对调用方来说也更透明,更值得推荐。

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

【我所认知的BIOS】-> Cache原理

以前有对Cache的架构研究,最近由于看了一些ARM上相关的cache的原理,随便把x86和ARM的cachestudy写成文章share出来吧。一晃都今天才上来。也说说吧,这大约三年里面变化蛮多的。...
  • lightseed
  • lightseed
  • 2014年02月15日 16:25
  • 4643

创建cacheManager 和 cache的几种方式

Ehcache是用来管理缓存的一个工具,其缓存的数据可以是存放在内存里面的,也可以是存放在硬盘上的。其核心是CacheManager,一切Ehcache的应用都是从CacheManager开始的。它是...
  • u014236541
  • u014236541
  • 2015年11月30日 21:45
  • 8861

缓存工厂-CacheManager

记录下项目中用到的缓存的功能,个人感觉这种实现方式还是挺不错的,该实现方式是通过结合spring的IOC容器进行bean管理。 1. 缓存类型配置(这里实现了两种memcached和redis),因...
  • haimingwei_haimian
  • haimingwei_haimian
  • 2015年12月04日 09:12
  • 1384

EhCache参数及磁盘持久化加载

EhCache是不错的Java开源缓存模块,Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。 你可...
  • codepython
  • codepython
  • 2015年01月23日 08:18
  • 2132

CacheManager的用法

v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML)...
  • zhanggnol
  • zhanggnol
  • 2011年06月05日 17:38
  • 12055

3.CacheManager(shiro缓存管理)

上一章我们讲了SecurityManager,接下来的章节顺序是根据SecurityManager的依次实现类的依赖组件来讲。 在讲cacheManager前,我们先了解下Cache。 Cache有...
  • wojiaolinaaa
  • wojiaolinaaa
  • 2015年09月02日 14:33
  • 5067

缓存之EHCache(一)

一、简介 非常简单,而且易用。     ehcache 是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,而且是hibernate 默认的缓存provider。ehcache 是一个纯J...
  • l271640625
  • l271640625
  • 2014年03月05日 10:03
  • 39716

ehcache入门基础示例

一:目录 EhCache 简介 Hello World 示例 Spring 整合 二: 简介1. 基本介绍EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中...
  • vbirdbest
  • vbirdbest
  • 2017年05月26日 08:55
  • 2055

EhCache介绍

ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。同时ehcache作为开放源...
  • hustxiayu
  • hustxiayu
  • 2017年07月01日 13:46
  • 243

oscache、ehcache缓存内容存入硬盘的方法

1.oscache将缓存内容存入硬盘:
  • huwenhu2007
  • huwenhu2007
  • 2014年05月08日 10:57
  • 10808
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cache实战之牛刀小试
举报原因:
原因补充:

(最多只允许输入30个字)