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

背景

如今的web系统已经愈来愈多的应用缓存技术,并且缓存技术确实是能实足的加强系统性能的。我在项目中也开始接触一些缓存的需求。java

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

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

j2cache介绍

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

github:https://github.com/mini188/j2cacheweb

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

项目主要特色:

  • 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:8Gsession

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

本地环境中写入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
相关文章
相关标签/搜索