在数据驱动的Web开发中,常常要重复从数据库中取出相同的数据,这种重复极大的增长了数据库负载。缓存是解决这个问题的好办法。可是ASP.NET中的HttpRuntime.Cache虽然已经能够实现对页面局部进行缓存,但仍是不够灵活,此时Memcached或许是你想要的。html
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。通过多年的发展,目前已经有不少知名的互联网应用使用到了Memcached,好比:Wikipedia、Flickr、Youtube、Wordpress等等。算法
上图展现了Memcached的通常性用途:分布式缓存。当浏览器首次请求访问数据时,应用服务器会先从数据库服务器中取得返回给用户,并将其以Key/Value键值对的形式存入Memcached服务器中。当用户第二次访问上次请求的数据时,应用服务器经过在Memcached服务器中查找是否有缓存,若是有则直接从Memcached中读取。因为Memcached服务器是部署在网站机房内网中的,并且数据时存储在服务器的内存空间中的,因此访问速度比数据库的磁盘IO要快一些,也就提升了服务响应速度,而且在高峰时间减轻了数据库服务器的负载压力。数据库
(1)Memcached做为高速运行的分布式缓存服务器,具备如下的特色:浏览器
libevent是个程序库,它将Linux的epoll、BSD类操做系统的kqueue等事件处理功能 封装成统一的接口。即便对服务器的链接数增长,也能发挥O(1)的性能。libevent: http://www.monkey.org/~provos/libevent/缓存
因为数据仅存在于内存中,所以重启memcached、重启操做系统会致使所有数据消失。 另外,内容容量达到指定值以后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached自己是为缓存而设计的服务器,所以并无过多考虑数据的永久性问题。服务器
NoSQL中比较优秀的一款产品:Redis,比较好地解决了数据持久化的这个问题,重启Redis不会致使数据丢失。分布式
PS:正由于memcached缓存服务器之间互不通讯,于是集群规模能够轻易地扩容,具备良好的伸缩性。memcached
(2)Memcached与Redis的对比性能
①没有必要过多的关心性能,由于两者的性能都已经足够高了。因为Redis只使用单核,而Memcached可使用多核,因此在比较上,平均每个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,可是比起Memcached,仍是稍有逊色。说了这么多,结论是,不管你使用哪个,每秒处理请求的次数都不会成为瓶颈。(好比瓶颈可能会在网卡)学习
②若是要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而若是Redis采用hash结构来作key-value存储,因为其组合式的压缩,其内存利用率会高于Memcached。固然,这和你的应用场景和数据特性有关。
③若是你对数据持久化和数据同步有所要求,那么推荐你选择Redis,由于这两个特性Memcached都不具有。即便你只是但愿在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
所以,咱们能够得出一个结论:在简单的Key/Value应用场景(例如缓存),Memcached拥有更高的读写性能;而在数据持久化和数据同步场景,Redis拥有更增强大的功能和更为丰富的数据类型;
Memcached的安装比较简单,并且支持多平台,包括:最经典的Linux、FreeBSD、Solaris (memcached 1.2.5以上版本)、Mac OS X以及咱们最熟悉的Windows。这里咱们使用咱们平常最熟悉的Windows平台来安装Memcached服务,并进行简单的配置和操做。
(1)下载Memcached For Windows
URL:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
其对应的源码地址:http://code.jellycan.com/files/memcached-1.2.6-win32-src.zip
(2)在虚拟机中安装Windows Server 2003 Enterprise Edition(非必要步凑,也能够在本机进行),取名为:MemcachedServer。另外,还要给虚拟机中的Windows Server设置好IP地址,确保宿主机和虚拟机可以互相ping通。
(3)将下载的Memcached包拷贝到Windows中的一个指定文件夹中,例如个人Windows Server中的C:/MemcachedServer/
(4)①在Windows中安装Memcached服务:memcached.exe -d install(那么,对应卸载命令为:memcached.exe -d uninstall)
②安装完成后便可在Windows服务列表中查看到Memcached Server的服务,通常来讲咱们要将其设为开机启动项:在属性中设置启动类型为自动便可
③安装好服务以后,就能够启动Memcached服务了,这里有两种方式来启动:一是直接在Windows服务列表里选中Memcached服务点击启动;二是在命令行中输入:memcached -d start(对应的中止服务命令为:memcached -d stop)
(5)检测Memcached服务是否成功启动:
①使用telnet命令链接到登陆台:telnet 服务器IP地址 11211(11211是默认的Memcached服务端口号),我这里输入:telnet 192.168.80.10 11211(192.168.80.10是个人Windows Server虚拟机的IP地址)
②打印当前Memcache服务器状态:stats
能够看到,经过stats命令列出了一系列的Memcached服务状态信息,那么这些信息又表明什么意思呢?咱们能够经过下图来知道:
(6)初步学习Memcached的数据读写命令操做:
①添加或更改命令:set KeyName 额外信息 存活时间 存储字节数 [回车] 具体存储的数据块
这里额外信息为0,表明无;存活时间为0,表明永久;而具体的数据块也就是咱们所说的Key/Value中的Value;
PS:这里也可使用add KeyName 额外信息 存活时间 存储字节数 [回车] 具体存储的数据块。不过set显然更为强大,它会判断keyname是否存在,不存在则新增,存在则修改;
②读取命令:get KeyName,这里咱们刚刚添加了一个key1的数据,因此咱们使用:get key1便获取了key1这个key的缓存数据信息;
③更新命令:replace KeyName 额外信息 存活时间 存储字节数 [回车] 具体存储的数据块
④删除命令:delete KeyName
本篇咱们初步了解了什么是Memcached,下载并安装了Memcached,而且将其设为Windows自启动服务,经过telnet链接到Memcached登陆台使用命令进行数据读写操做。整体来讲,Memcached是一个高性能的Key/Value缓存系统,经过构建Memcached集群,可以适应大型网站的分布式缓存服务须要。下一篇,咱们将在.Net中链接并操做Memcached,最后以一个综合案例来体现Memcached做为分布式缓存的重要做用。
最后,若是亲以为个人文章不错或者对你有用,麻烦帮我点个“推荐”,让我更有动力继续写下去,谢谢!
(1)传智播客马伦,《Memcached公开课》,http://bbs.itcast.cn/thread-14836-1-1.html
(2)charlee,《Memcached彻底剖析》,http://kb.cnblogs.com/page/42731/
(3)张钊,《Memcached介绍》,http://blog.csdn.net/zz198808/article/details/8032571
(4)toxic,《memcached》,http://www.cnblogs.com/lost-1987/articles/3069460.html