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

背景

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

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

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

j2cache介绍

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

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

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

项目主要特点:

  • 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差这么大我没有搞明白,不知道是不是我的方法不对呢?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rainbond开源「容器云平台」

好雨云帮近期问答集锦(1.16 - 2.5)

1213
来自专栏分布式系统进阶

利用Mesos构建多任务调度系统

4235
来自专栏企鹅号快讯

MySQL数据归档实战-python和pt-archiver的强强结合

一,引言 前段时间在优雅的使用pt-archiver进行数据归档一文中介绍了pt-archiver的使用方法,也将pt-archiver部署到了生产环境,这时候...

5148
来自专栏web前端教室

大白话,设计一个购物车对象

image.png 今天的作业是,设计一个购物车对象。就是这个购物车对象,通过prototype来添加各种方法,然后通过new一个新对象之后,就可以调用它的...

2097
来自专栏北京马哥教育

etcd:从应用场景到实现原理的全方位解读

马哥linux运维 | 最专业的linux培训机构 ---- 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作...

54812
来自专栏FreeBuf

自己动手打造Github代码泄露监控工具

众说周知,Github这块肥肉很受安全人员和黑客关注。因为很多新进程序猿和老手不经意就会把他们的劳动成果分享出来,而往往这种开源精神,奉献精神会对企业带来一定的...

1752
来自专栏北京马哥教育

如何利用Python网络爬虫抓取微信朋友圈的动态

今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的A...

3300
来自专栏快乐八哥

普通文件和数据库存储的对比

在大多数企业开发或Web开发中,都会涉及数据的存储和检索。存储数据有两种基本的方法:保存到普通文件中(File System),或者保存到数据库(Databas...

2159
来自专栏繁花云

利用Speedtest测试服务器网速

speedtest是由国外用户sivel编写的一款跨平台的网速测试软件,使用GO编写,支持大部分平台

4200
来自专栏kangvcar

[face_recognition中文文档] 第5节 特约贡献

1212

扫码关注云+社区

领取腾讯云代金券