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
分享到:
相关推荐
Python-memcached是Python语言的一个库,用于与Memcached缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。Python-memcached库则...
安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf ...-disable-memcached-sasl && make && make install
**hibernate-memcached-1.2.2.jar** 文件是这个扩展的核心库,其中包含了所有必要的类和接口,使得Hibernate能够识别并使用Memcached作为二级缓存。这个版本的hibernate-memcached已经过测试和优化,确保与1.2.2版本...
java-memcached-2.6.6.jar
这个`python-memcached-latest.tar`压缩包包含了最新的Python绑定版本,即`python-memcached-1.53`。 **Python-Memcached库** Python-Memcached库为Python开发者提供了简单而高效的API,以便在应用中集成Memcached...
这个包是最高版本了,google code是1.22,但是这个版本是基础班的1.5版本.是github上源代码经过我打包出来的jar
ssm3-mybatis2-memcached 使用了 simple-spring-memcached 。因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-...
Python-Memcached是一个Python接口,用于与Memcached内存缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的响应速度。Python-Memcached库允许Python开发者...
《Hibernate与Memcached整合详解——基于hibernate-memcached-1.1.0源码分析》 在当今的Web开发领域,数据持久化是一个必不可少的环节,而Hibernate作为Java领域广泛使用的对象关系映射(ORM)框架,极大地简化了...
在安装和使用"Nagios-Plugins-Memcached-0.02"之前,你需要确保已经安装了Nagios基础环境和Memcached服务。接下来,你可以按照以下步骤操作: 1. **解压文件**:首先,使用tar命令解压下载的压缩包: ``` tar -...
cas-client-support-distributed-memcached-3.2.0.jar
Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-...
7. `docs`:文档目录,可能包括用户手册、API参考等,对于学习和使用SSM非常有帮助。 在实际应用SSM时,我们需要配置Spring的上下文,设置Memcached服务器的连接信息,并启用SSM的相关组件。然后,就可以在我们的...
当我们需要在Spring应用中集成Memcached时,"simple-spring-memcached"(SSM)是一个很好的选择。这篇博客(链接:https://younglibin.iteye.com/blog/2157666)将指导我们如何进行这个集成过程。 首先,我们要了解...
hibernate-memcached-1.1.0.jar
通过学习和实践PHP-Memcached-Demo项目,开发者不仅可以掌握PHP与Memcached的整合,还能进一步理解缓存技术在提高Web应用性能中的重要作用。结合实际项目需求,灵活运用这些知识,将有效提升网站的响应速度和用户...
资源分类:Python库 所属语言:Python 资源全名:python-binary-memcached-0.24.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
在本文中,我们将深入探讨Laravel开发中的一个关键组件——`laravel-memcached-plus`扩展。这个扩展针对Laravel5的内置Memcached缓存驱动进行了增强,为开发者提供了更全面的功能,包括持久连接、SASL认证以及自定义...
本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-...