`
xieke
  • 浏览: 6146 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

memcached,jcs,jdbc直接访问之 优劣比较

阅读更多

使用memcached作为orm缓存实现已经有一段时间了,
今天写了一段测试代码,想看看缓存对系统性能到底有多大提升,结果出乎意料。

测试方法 getById(String id),根据记录id从数据库中查出对象。

1. jdbc版本实现:直接用jdbc执行select方法,代码大致如下
		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客户端实现
		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等,在系统性能,部署复杂性等方面都较理想。

分享到:
评论
2 楼 xieke 2009-04-29  
yyjn12 写道
测试一下高并发环境吧,不是循环多少次。

我用jmeter压过,结果并不会有意外:
单个操作耗时短,高并发自然耗时也短。

yyjn12 写道
memcached 是多用于互联网的。做大访问量的网站很好的选择,而不是用于企业应用环境的。


这时为什么呢 ?

yyjn12 写道

当做大互联网应用的时候。memcached才能体现出其优势来。
每秒内都有很多页面请求,每个页面请求都需要访问数据库的话。数据库是承受不住的。
在前边加memcached,应该会起到很好的作用。


为什么数据库撑不住,memcached能撑住呢??

yyjn12 写道


没有并发,单表查询,又不是很庞大的表的话,数据库本身速度当然会很快。


的确很快,起码比memcached快。
1 楼 yyjn12 2009-02-20  
测试一下高并发环境吧,不是循环多少次。

memcached 是多用于互联网的。做大访问量的网站很好的选择,而不是用于企业应用环境的。

当做大互联网应用的时候。memcached才能体现出其优势来。
每秒内都有很多页面请求,每个页面请求都需要访问数据库的话。数据库是承受不住的。
在前边加memcached,应该会起到很好的作用。

没有并发,单表查询,又不是很庞大的表的话,数据库本身速度当然会很快。

相关推荐

    memcached java客户端驱动包

    例如,可以将频繁访问但计算成本高的数据存储在Memcached中,减少对数据库的依赖。或者,通过设置缓存过期时间,实现动态数据的缓存,提高响应速度。 ### 6. 扩展功能 除了基础操作,驱动包还可能包含其他高级功能...

    内核态memcached模块

    4. **网络协议栈集成**:内核态的memcached需要与内核的网络协议栈集成,可能直接处理TCP/IP协议,接收和发送缓存请求,从而减少了用户空间到内核空间的切换开销。 5. **性能优化**:内核态的优势在于减少了用户态...

    memcached 64位 window

    Memcached的工作原理是将数据存储在内存中,避免了频繁读写硬盘导致的I/O延迟,从而提高了数据访问速度。由于其简单的设计和高效的性能,Memcached在许多高流量网站和应用中被广泛应用。 **64位系统的优势** 在64...

    memcached安装软件 libevent magent memcached

    本篇文章将详细讲解如何安装和配置memcached,以及与之相关的libevent和magent。 首先,我们需要了解libevent库。libevent是一个事件通知库,它允许程序处理多个网络连接,并有效地处理来自不同源的事件。在安装...

    windows下memcached+memcached.dll 5.3.8

    标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached...通过安装和配置Memcached,可以显著提升基于PHP的Web应用程序的性能,减少对数据库的直接访问,提高响应速度。

    memcached服务器端memcached.exe 下载

    这个绿色版的memcached意味着它无需安装,下载解压后即可直接运行,非常方便。 描述中提到的“绿色版memcached”,是指这是一个便携式的版本,不需在系统中留下任何配置痕迹,适合临时或测试环境使用。它附带了`...

    memcached和redis比较

    本文将详细比较这两种技术在可靠性、数据一致性、内存管理、内存使用率、应用场景、性能以及数据恢复等方面的不同之处。 #### 二、可靠性 - **Redis** 支持两种持久化方式:快照(snapshotting)和追加文件(Append ...

    memcached安装包以及MemCachedClient

    它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可移植性强,广泛应用于多种编程语言环境。 **1. 安装 Memcached** 首先,你需要下载 Memcached 的源码包或预编译...

    Memcached使用点滴 服务集成平台需要对服务有所监控,包括访问频率控制以及访问次数控制

    此外,Memcached 的计数器功能也可以用来实现更多的功能,例如,可以使用 Memcached 的incr 命令来统计服务的访问次数,从而实现访问次数控制。 Memcached 的其他特点包括: * 高性能:Memcached 可以提供高性能...

    memcached windows稳定版

    在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...

    memcached.exe及memcached.dll

    4. **缓存淘汰策略**:由于内存有限,当存储空间满时,Memcached会根据LRU(Least Recently Used)最近最少使用原则,自动淘汰不常访问的数据。 **二、Memcached.exe和Memcached.dll** 1. **memcached.exe**:这是...

    memcached-1.5.4

    `memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁的磁盘I/O操作。本文将详细介绍`memcached-...

    hibernate-memcached包

    通过使用二级缓存,可以减少对数据库的直接访问,从而降低系统的负载。 Memcached是一种高性能的、分布式的内存对象缓存系统,用于存储临时数据,以减少数据库查询的次数。它可以在多台服务器之间共享数据,提高...

    memcached各种序列化策略之session共享

    标题提到的"memcached各种序列化策略之session共享",意味着本文将探讨如何在Memcached中使用不同的序列化方法来共享Web应用中的session数据。Memcached是一个高性能、分布式内存对象缓存系统,常用于减轻数据库负载...

    memcached全面剖析.pdf

    4. 分布式:memcached通过一致性哈希(Consistent Hashing)实现分布式,多个memcached实例之间不会直接通信,可实现高可用性和水平扩展性。 安装和配置memcached相对简单,可以通过源码编译安装,也可以使用包管理...

    oracle掉用memcached,得用oracle调用java,java调用memcached

    Java提供了JDBC(Java Database Connectivity)用于与Oracle通信,以及Memcached客户端库,如spymemcached,来与Memcached交互。 具体实现步骤如下: 1. **设置Memcached服务器**:`setMemcachedServer.sql`可能...

    安装Memcached及Memcached配置

    例如,Windows用户可以访问http://code.jellycan.com/memcached/下载win32二进制文件。 - 安装过程包括解压缩下载的文件到任意目录,例如`D:\memcached`,然后打开命令行工具,切换到`Memcached.exe`所在的目录。 ...

Global site tag (gtag.js) - Google Analytics