Key/Value之王Memcached初探:1、掀起Memcached的盖头来

1、Memcached是何方神圣?

Memcached

  在数据驱动的Web开发中,常常要重复从数据库中取出相同的数据,这种重复极大的增长了数据库负载。缓存是解决这个问题的好办法。可是ASP.NET中的HttpRuntime.Cache虽然已经能够实现对页面局部进行缓存,但仍是不够灵活,此时Memcached或许是你想要的。html

  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。通过多年的发展,目前已经有不少知名的互联网应用使用到了Memcached,好比:Wikipedia、Flickr、Youtube、Wordpress等等。算法

2、为何要使用Memcached?

memcached   

  上图展现了Memcached的通常性用途:分布式缓存。当浏览器首次请求访问数据时,应用服务器会先从数据库服务器中取得返回给用户,并将其以Key/Value键值对的形式存入Memcached服务器中。当用户第二次访问上次请求的数据时,应用服务器经过在Memcached服务器中查找是否有缓存,若是有则直接从Memcached中读取。因为Memcached服务器是部署在网站机房内网中的,并且数据时存储在服务器的内存空间中的,因此访问速度比数据库的磁盘IO要快一些,也就提升了服务响应速度,而且在高峰时间减轻了数据库服务器的负载压力。数据库

  (1)Memcached做为高速运行的分布式缓存服务器,具备如下的特色:浏览器

  • 协议简单:使用简单的基于文本行的协议,没有使用复杂的XML协议。所以,经过telnet也能在memcached上保存数据、取得数据;
  • 基于libevent的事件处理:memcached使用这个libevent库,所以能在Linux、BSD、Solaris等操做系统上发挥其高性能;
libevent是个程序库,它将Linux的epoll、BSD类操做系统的kqueue等事件处理功能 封装成统一的接口。即便对服务器的链接数增长,也能发挥O(1)的性能。

libevent: http://www.monkey.org/~provos/libevent/缓存

  • 内置内存存储方式:为了提升性能,memcached中保存的数据都存储在memcached内置的内存存储空间中;

因为数据仅存在于内存中,所以重启memcached、重启操做系统会致使所有数据消失。 另外,内容容量达到指定值以后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached自己是为缓存而设计的服务器,所以并无过多考虑数据的永久性问题服务器

NoSQL中比较优秀的一款产品:Redis,比较好地解决了数据持久化的这个问题,重启Redis不会致使数据丢失。分布式

  • 不互相通讯的分布式:尽管是“分布式”缓存服务器,但服务器端并无分布式功能,这彻底取决于客户端的实现。咱们会很惊奇的发现memcached的集群很是easy,简单得甚至只须要在客户端的配置文件中添加服务器IP与端口号;换句话说,咱们的应用程序只须要将数据请求给memcached客户端,在memcached客户端中会经过一个分布式算法(一致性Hash算法)从memcached服务器列表中计算一个memcached服务器的地址(若是是读请求,则根据Key在分布式算法中获得缓存有该Key的memcached服务器信息),而后客户端将数据(Key/Value对)传递给计算出来的memcached服务器(若是是读请求,则从计算出来的memcached服务器中读取含有指定Key的数据);

memcachedcluster  

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拥有更增强大的功能和更为丰富的数据类型;

3、Memcached的安装与简单操做

  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

4、学习小结

  本篇咱们初步了解了什么是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

 

相关文章
相关标签/搜索