哪种缓存效果高?开源一个简单的缓存组件j2cache
背景
现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的。我在项目中也开始接触一些缓存的需求。
- 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务器来说很好。
- 为了系统的可用性,需要做灾备,那么就要多准备一套系统环境,这时就会有一些共享资源的问题,比如Tomcat的session共享出来
- 几个系统会公用一套缓存数据,这样就变成一个共享池
需求的增长也就带来了系统的变化,也正为这种变化我开始思考怎么让这些代码兼容,并为以后的系统模块提供比较统一的支持。正好在openfire这个开源项目上得到了启发,它的集群思路我觉得是种不错的解决方案。
j2cache介绍
随后就开始写一个简单的缓存系统,结构非常的简单,代码也非常的简单。说是开源其实也有点过了,只是觉得闭门造车没有意思,所以将代码放在github上,如果有高手看到指点一下那我不是赚大了。哈哈。
代码非常简单,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差这么大我没有搞明白,不知道是不是我的方法不对呢?
哪种缓存效果高?开源一个简单的缓存组件j2cache的更多相关文章
- Java实现一个简单的缓存方法
缓存是在web开发中经常用到的,将程序经常使用到或调用到的对象存在内存中,或者是耗时较长但又不具有实时性的查询数据放入内存中,在一定程度上可以提高性能和效率.下面我实现了一个简单的缓存,步骤如下. 创 ...
- 手写一个简单的starter组件
spring-boot中有很多第三方包,都封装成starter组件,在maven中引用后,启动springBoot项目时会自动装配到spring ioc容器中. 思考: 为什么我们springBoot ...
- 编写一个简单的COM组件
参考网站:编写一个简单的COM组件_a ray of sunshine-CSDN博客 (1) 用MIDL编写.idl文件 //将以下代码保存成 IXIYIZ.idl 文件 //在命令行上进行编译,编译 ...
- setbuffer和freopen做一个简单的日志组件
目标场景是这样的: 多线程的应用程序要频繁打一些小字节的日志,也不想引用很重的日志库. 设想了一个极其简单的日志组件,main线程中重定向stdout到文件,同时setbuffer设置一个10k的缓冲 ...
- 开源一个简单的react-native 菜单栏抽屉组件,带缩放效果
效果如图所示,源码地址:https://github.com/pofabs/PoSideMenu
- 开源一个简单的c++软光栅渲染器
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5751111.html 由于开学就大四面临找工作了,为了整理下项目, ...
- 为WPF, UWP 及 Xamarin实现一个简单的消息组件
原文地址:Implementing a simple messenger component for WPF, UWP and Xamarin 欢迎大家关注我的公众号:程序员在新西兰了解新西兰IT行业 ...
- 开源一个vue2的tree组件
一直打算偷懒使用个现成的树组件,但是在github上找了一大圈没有找到真正满足应用开发的树组件,所以没办法只能自己写了一个,开源出来希望可以帮助到需要的人,同时如果大家觉得好用,我可以顺带骗骗★(希望 ...
- python安装及写一个简单的验证码组件(配合node)
1.安装Python 到官网下载响应系统的版本(这里以windows为例):https://www.python.org/downloads/windows/ 然后就是不断地"下一步&quo ...
随机推荐
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- Android-armebi-v7a、arm64-v8a、armebi的坑
先来一波扫盲: armeabi:针对普通的或旧的arm v5 cpu armeabi-v7a:针对有浮点运算或高级扩展功能的arm v7 cpu(32位ARM设备) arm64-v8a:64位ARM设 ...
- H5坦克大战之【画出坦克】
今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...
- ajax前后端数据交互简析
前端-------->后端 方法:POST 将要传递给后台的数据在前端拼接成url字符串,通过request.send()传递给后台,后台php把得到的数据以索引数组的方式存储在$_POST中. ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- [原] 利用 OVS 建立 VxLAN 虚拟网络实验
OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- 微信小程序开发日记——高仿知乎日报(上)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...