【TalkingData技术分享】Java Cache性能分析

创业邦  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

导语:在高并发的应用中,大量(访问文件、DB、远端服务调用等)操作会严重影响性能。使用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上,有感兴趣的同学可以自己跑跑试试,在此我只贴出部分测试结果。

随意打赏

提交建议
微信扫一扫,分享给好友吧。