哪种缓存效果高?开源一个简单的缓存组件j2cache

背景

现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的。我在项目中也开始接触一些缓存的需求。

  • 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务器来说很好。
  • 为了系统的可用性,需要做灾备,那么就要多准备一套系统环境,这时就会有一些共享资源的问题,比如Tomcat的session共享出来
  • 几个系统会公用一套缓存数据,这样就变成一个共享池

需求的增长也就带来了系统的变化,也正为这种变化我开始思考怎么让这些代码兼容,并为以后的系统模块提供比较统一的支持。正好在openfire这个开源项目上得到了启发,它的集群思路我觉得是种不错的解决方案。

j2cache介绍

随后就开始写一个简单的缓存系统,结构非常的简单,代码也非常的简单。说是开源其实也有点过了,只是觉得闭门造车没有意思,所以将代码放在github上,如果有高手看到指点一下那我不是赚大了。哈哈。

github:https://github.com/mini188/j2cache

代码非常简单,maven工程引入也很容易,我就不打算对代码做啥说明,有兴趣的朋友下载简单看看就能明白。 image

项目主要特点:

  • Key-value的存储结构
  • 基于java.util.Map<K, V>接口,这样很容易与hashmap之类的兼容
  • 基于策略模式的扩展

为此项目中实现了三种存储方案:

  • jvm虚拟机内存,适用于单应用,或者不需要同步的情况
  • redis,适用于需要redis的场景,比如缓存共享等
  • iginte,一种带网络计算的方案

j2cache的入测试

测试机器环境:

我的测试方法比较简单,向缓存里连续写100万个对象,然后看看处理的性能。说明一下,这些测试都是在本机完成的

OS:Windows7 64位

CPU:I5-4210U @ 1.70GHZ 2.40GHZ

RAM:8G

Redis用的是Redis on Windows Redis-x64-3.2.100

本地环境中写入1,000,000个对象的

  • 开始测试写入缓存jvmCache

总共耗时:2380ms

每毫秒写入:420条

每秒写入:420000条

  • 开始测试写入缓存igniteCache

总共耗时:9503ms

每毫秒写入:105条。

每秒写入:105000条。

  • 开始测试写入缓存redisCache

总共耗时:40367ms

每毫秒写入:24条。

每秒写入:24000条。

结果

为了对各种方案进行一些数据上对比,做了一个简单的写入测试,使用本地内存做缓存这种方案最高效,写入量达到42万每秒。而redis则只达到了24000条/秒,我对redis不是特别熟悉,看到这个数据有点诧异。

我比较懒,没有测试一段时间内的读写性能,只不过从这个简单的测试中发现,本地内存的效果还是很高的,如果加上一些其他的功能,比如网络传输,数据同步等后性能会下降。

只不过redis和ignite差这么大我没有搞明白,不知道是不是我的方法不对呢?

 

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!
http://www.cnblogs.com/5207
posted @ 2016-09-26 11:41  5207  阅读(1477)  评论(0编辑  收藏  举报