Twitter大量使用Memcached,MQ也是基于Memcached 协议的,Memcached并不是新鲜的东西,但是由于它强大的影响力,有必要深入一下,这篇主要讲它的基础:
1.Memcached是什么?
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据 库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目); 当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
一般MemCached架构在数据库层之前,应用程序先访问MemCached Server,并从里面拿数据,如果拿不到,再访问数据库,以减低数据库的负载。在Web应用中,IO始终是个瓶颈,尤其是数据库这层,数据库在数据量不大时,没有显现明显的性能问题,但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。
2.谁在用MemCached?
大量的Web2.0的网站架构都使用了MemCached,Web2.0的用户增长速度,使得数据量急剧增加,数据库已经承受不了这么大的压 力,MemCached几乎成为了大网站架构的标配。
LiveJournal
Wikipedia
Flickr
Bebo
Twitter
Typepad
Yellowbot
Youtube
Digg
Wordpress
Craigslist
Mixi
3.Memcached的应用场合
在很多时候,memcached都被滥用了,这当然少不了对它的抱怨。我经常在论坛上看见有人发贴,类似于"如何提高效率",回复是"用memcached",至于怎么用,用在哪里,用来干什么一句没有。memcached不是万能的,它也不是适用在所有场合。Memcached是"分布式"的内存对象缓存系统,那么就是说,那些不需要"分布"的,不需要共享的,或者干脆规模小到只有一台服务器的应用, memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。在我之前的测试数据中显示,memcached本地读写速度要比直接PHP内存数组慢几十倍,而APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用memcached是非常不划算的。Memcached在很多时候都是作为数据库前端cache使用的。因为它比数据库少了很多SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力,使系统执行效率提升。另外,memcached也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在memcached中,被多个应用共享。
需要注意的是,memcached使用内存管理数据,所以它是易失的,当服务器重启,或者memcached进程中止,数据便会丢失,所以 memcached不能用来持久保存数据。很多人的错误理解,memcached的性能非常好,好到了内存和硬盘的对比程度,其实memcached使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于它本身非常"轻",因为没有过多的开销和直接的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,memcached进程本身并不占用多少CPU资源的情况。
4.
Memcached的重要特征
1)基于C/S结构,协议简单
例如
存储命令:"set", "add", "replace", "append","prepend" and "cas"
获取命令:get和gets
2)基于libevent的网络并发连接事件处理,使得在高并发情况下,依然保持了非常高的响应能力
3)优化的内存存储管理
4)基于客户端的MemCached的分布式
MemCached是分布式的,但是对Cache而言是集中式的,它通过client端的处理,让key对应的Hash值相同,cache数据存放在同一个server上:
例如:
- 大小: 67.1 KB
分享到:
相关推荐
安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf ...-disable-memcached-sasl && make && make install
python-memcached python-memcached
java-memcached-2.6.6.jar
这个包是最高版本了,google code是1.22,但是这个版本是基础班的1.5版本.是github上源代码经过我打包出来的jar
ssm3-mybatis2-memcached 使用了 simple-spring-memcached 。因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-...
cas-client-support-distributed-memcached-3.2.0.jar
Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-...
hibernate-memcached-1.1.0-sources.zip
hibernate-memcached-1.1.0.jar
python-memcached-latest.tar
Nagios-Plugins-Memcached-0.02.tar.gz
用于hibernate集成memcached作为二级缓存所需要的包,1.2.2版本
simple-spring-memcached是与mamcached与spring结合,实现注解的方式缓存。 这是java所需要的jar,版本为3.3.0
资源分类:Python库 所属语言:Python 资源全名:python-binary-memcached-0.24.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
php-memcached-demo.tar.gz为memcache缓存服务器的软件包
本lib包包含:javolution-5.5.1.jar、kryo-1.03.jar、kryo-serializers-0.10.jar、memcached-2.5.jar、memcached-session-manager-1.5.1.jar、memcached-session-manager-tc7-1.5.1.jar、minlog-1.2.jar、msm-...
hibernate-memcached, 在Hibernate中,使用Memcached作为第二级分布式缓存的库 休眠 memcachedHibernate中使用Memcached作为第二级分布式缓存的库。基于优秀的spymemcached客户端包含对 Whalin ( danga ) memcached...
memcached python-memcached
java - memcached所需要的jar包 A. alisoft-xplatform-asf-cache-2.5.1.jar B. commons-logging-1.0.4.jar C. hessian-3.0.1.jar D. log4j-1.2.9.jar E. stax-api-1.0.1.jar F. wstx-asl-2.0.2.jar