:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Java Cache性能分析

Tech

Java Cache性能分析

在高并发的应用中,大量(访问文件、DB、远端服务调用等)操作会严重影响性能。使用Cache是一种比较常见的手段。本文对比较常用的几种Cache做了一个性能测试,分享一下在不同场景下,使用什么样的Cache。

本文主要涉及的Cache(包括一些并不是缓存,但可以用来做缓存的东东)。

 

1.    GuavaCache

A.  优点:有完善的缓存清理策略,在有清理策略的缓存中速度最快(限于本文中的缓存)。方便统计缓存命中率等信息。而且很轻量。

 

2.   EhCache

A.  优点:可以使用硬盘来缓存数据。同样具有完善的清理策略。

B.  缺点:速度太慢。

 

3.   ConcurrentHashMap

A.  优点:并发get和put会比HashTable快很多。

B.  缺点:这并不是一个缓存,你需要自己写缓存清理策略。

 

4.   Hashtable

A.  优点:线程少时读写速度均很快。

B.  缺点:这并不是一个缓存,你需要自己写缓存清理策略。当线程多了,速度不及ConcurrentHashMap

 

5.    Redis

A.  优点:可以多进程多机器公用内存,内存很节省,也有缓存清理策略。

B.  缺点:速度慢,需要自己写命中率之类的统计,最重要的是需要良好的网络环境。

 

从上述的优缺点来看,如果你知道要缓存的数量较少并且增长缓慢时,相比其它缓存使用ConcurrentHashMap可以显著增加你的速度。目前我常用的场景有数据库某些不大的表的缓存。如果你所缓存的数量很多,或者数量增长很快时,你不能将所有内容都缓存下来,你只能缓存一些你常用的,推荐GuavaCache。

测试的代码在JavaCacheAnalytics上,有感兴趣的同学可以自己跑跑试试,在此我只贴出部分测试结果。

技术正2

 

Leave a comment

随时欢迎您 联系我们