使用memcached作为orm缓存实现已经有一段时间了,
今天写了一段测试代码,想看看缓存对系统性能到底有多大提升,结果出乎意料。
测试方法 getById(String id),根据记录id从数据库中查出对象。
1. jdbc版本实现:直接用jdbc执行select方法,代码大致如下
Java代码
PreparedStatement pst = null;
ResultSet set = null;
sql = "select " + TABLECOLUMN + " from " + TABLENAME + " where "
+ IDCOLUMN + " = '"+id+"'";
pst = con.prepareStatement(sql);
set = pst.executeQuery();
BizObject b = helpSetValue(set); //从set到orm业务对象数据拷贝
return b;
PreparedStatement pst = null;
ResultSet set = null;
sql = "select " + TABLECOLUMN + " from " + TABLENAME + " where "
+ IDCOLUMN + " = '"+id+"'";
pst = con.prepareStatement(sql);
set = pst.executeQuery();
BizObject b = helpSetValue(set); //从set到orm业务对象数据拷贝
return b;
2.memcached实现,使用whalin客户端实现
Java代码
mcc.setCompressEnable( true );
mcc.setCompressThreshold( 64 * 1024 );
BizObject o = (BizObject)mcc.get(mccid);
if (o==null){
o = loadObject(id); //调用jdbc查询,并set到memcached server
}
return o;
mcc.setCompressEnable( true );
mcc.setCompressThreshold( 64 * 1024 );
BizObject o = (BizObject)mcc.get(mccid);
if (o==null){
o = loadObject(id); //调用jdbc查询,并set到memcached server
}
return o;
具体测试就是循环调用 getById方法 取出指定id,测试结果如下:
执行10次:
jdbc耗时:haoshi 31毫秒
memcached耗时:haoshi 109毫秒
执行100次:
jdbc耗时:haoshi 188毫秒
memcached耗时:haoshi 406毫秒
执行1000次:
jdbc耗时:haoshi 1579毫秒
memcached耗时:haoshi 2435毫秒,
memcache和oracle11g都安装在同一IBMx3650服务器上,
测试结果是在另外一台客户机上运行得到的。
改用jcs本地缓存后,测试1000次循环只需要94毫秒。
oracle和memcached在同一台服务器上(生产机),网络状况应该都一样,排除这个差别,
memcached性能表现竟然比直接jdbc访问要差,
由此可见,由于memcached的网络访问方式所限,无法达到很高的响应速度,
使用memcached只能分担数据库压力,对系统性能的改善主要体现在提高系统可伸缩性,而不是提高绝对速度。
而是用本地jvm缓存能极大提高响应速度,但是由于集群支持问题,扩展性有限。
综述,在系统规模不是很大,没有用到集群,memcached占用内存几十兆的情况下,也就是普通的企业应用环境,
memcached并不能很好的发挥其优势,可以考虑用普通的jvm缓存,如jcs等,在系统性能,部署复杂性等方面都较理想。
分享到:
相关推荐
例如,可以将频繁访问但计算成本高的数据存储在Memcached中,减少对数据库的依赖。或者,通过设置缓存过期时间,实现动态数据的缓存,提高响应速度。 ### 6. 扩展功能 除了基础操作,驱动包还可能包含其他高级功能...
4. **网络协议栈集成**:内核态的memcached需要与内核的网络协议栈集成,可能直接处理TCP/IP协议,接收和发送缓存请求,从而减少了用户空间到内核空间的切换开销。 5. **性能优化**:内核态的优势在于减少了用户态...
Memcached的工作原理是将数据存储在内存中,避免了频繁读写硬盘导致的I/O延迟,从而提高了数据访问速度。由于其简单的设计和高效的性能,Memcached在许多高流量网站和应用中被广泛应用。 **64位系统的优势** 在64...
本篇文章将详细讲解如何安装和配置memcached,以及与之相关的libevent和magent。 首先,我们需要了解libevent库。libevent是一个事件通知库,它允许程序处理多个网络连接,并有效地处理来自不同源的事件。在安装...
标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached...通过安装和配置Memcached,可以显著提升基于PHP的Web应用程序的性能,减少对数据库的直接访问,提高响应速度。
这个绿色版的memcached意味着它无需安装,下载解压后即可直接运行,非常方便。 描述中提到的“绿色版memcached”,是指这是一个便携式的版本,不需在系统中留下任何配置痕迹,适合临时或测试环境使用。它附带了`...
本文将详细比较这两种技术在可靠性、数据一致性、内存管理、内存使用率、应用场景、性能以及数据恢复等方面的不同之处。 #### 二、可靠性 - **Redis** 支持两种持久化方式:快照(snapshotting)和追加文件(Append ...
它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可移植性强,广泛应用于多种编程语言环境。 **1. 安装 Memcached** 首先,你需要下载 Memcached 的源码包或预编译...
此外,Memcached 的计数器功能也可以用来实现更多的功能,例如,可以使用 Memcached 的incr 命令来统计服务的访问次数,从而实现访问次数控制。 Memcached 的其他特点包括: * 高性能:Memcached 可以提供高性能...
在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...
4. **缓存淘汰策略**:由于内存有限,当存储空间满时,Memcached会根据LRU(Least Recently Used)最近最少使用原则,自动淘汰不常访问的数据。 **二、Memcached.exe和Memcached.dll** 1. **memcached.exe**:这是...
`memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁的磁盘I/O操作。本文将详细介绍`memcached-...
通过使用二级缓存,可以减少对数据库的直接访问,从而降低系统的负载。 Memcached是一种高性能的、分布式的内存对象缓存系统,用于存储临时数据,以减少数据库查询的次数。它可以在多台服务器之间共享数据,提高...
标题提到的"memcached各种序列化策略之session共享",意味着本文将探讨如何在Memcached中使用不同的序列化方法来共享Web应用中的session数据。Memcached是一个高性能、分布式内存对象缓存系统,常用于减轻数据库负载...
4. 分布式:memcached通过一致性哈希(Consistent Hashing)实现分布式,多个memcached实例之间不会直接通信,可实现高可用性和水平扩展性。 安装和配置memcached相对简单,可以通过源码编译安装,也可以使用包管理...
Java提供了JDBC(Java Database Connectivity)用于与Oracle通信,以及Memcached客户端库,如spymemcached,来与Memcached交互。 具体实现步骤如下: 1. **设置Memcached服务器**:`setMemcachedServer.sql`可能...
例如,Windows用户可以访问http://code.jellycan.com/memcached/下载win32二进制文件。 - 安装过程包括解压缩下载的文件到任意目录,例如`D:\memcached`,然后打开命令行工具,切换到`Memcached.exe`所在的目录。 ...