Memcached缓存服务器介绍
Memcached 是一个开源、易用、高性能的“分布式”的内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对数据库的访问来加速web应用程序,它把数据以“键值对”的形式存储在内存中。
现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。
memcached有如下特性
1、存储数据结构简单:
基于key/value存储数据;
2、协议简单:
客户端与服务端使用基于文本行的协议,或二进制协议通信
3、基于libevent事件处理机制:
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口,即使对服务器的连接数增加,也能发挥O(1)的性能;
4、内置内存存储方式:
memcached采用了slab allocation机制来管理、分配内存,与传统的malloc/free内存管理机制比较,slab allocator能有效避免内存碎片,而且能避免因内存被反复申请、释放,给服务器带来的压力。
5、独特的数据过期删除机制:
memcached内部不会去监视缓存的记录是否过期,只是在get数据时查看记录的时间戳,检查记录是否过期,这种技术被称为Lazy(惰性) Expiration。如果检查到记录已过期,memcached会优先使用这些空间,但当有新的数据需要缓存而又没有多余的空间存放数据时,memcached依然采用LRU(Leaset Recently Used,最近最少使用)机制来分配内存空间。
6、memcached不互相通信的分布式集群:
memcached服务本身没有分布式功能,各个memcached节点不会互相通信共享信息,这完全取决于客户端来实现。目前有两种分布式方法,一种是根据余数计算做分布,另一种是consistent hashing(一致性hash)计算做分布。根据余数计算做分布大致原理是这样的,先求得key的hash值,再除以服务器的台数,根据其余数来选择服务器,这种算法简单,而且效果非常好,但服务器的增加、移除都会大面积影响缓存数据的重组,代价会很大,数据器数据一量变化,余数就发生改变,缓存就不会命中,数据必须重新分配。而consistent hashing这种算法大致原理是先把各个节点做hash计算,得到其hash值,把这些hash值放到一个0-2^32的圆环上,再救出存储数据key的hash值,也把这个值放在圆环上,然后顺时针开始查找,就将数据存储到第一个服务器上,如下图所示(图片来自网络):
采用余数分布式算法会因服务节点的增加、移除导致数据大面积重组,而consistent hashing分布式算法在服务器增加、移除时只是在圆环上发生变动服务器的逆时针方向上的第一台服务器会受到影响,如下图所示(图片来自网络):
而在consistent hashing分布式算法中有的还采取了虚拟节点的思想,让一个memcached节点虚拟出数据个节点,把这些虚拟节点放在圆环上,而这些节点是分布不均匀的,这样能抑制节点的分布不均匀, 最大限度地减小服务器增减时的缓存重新分布。
memcached是一个非常“轻”的应用,对服务器的硬件要求极低,安装也十分简单,因其依赖libevent机制实现处理请求,所以系统先要安装libevent库,如果是源码安装memcached,只要在configure时指定“--with-libevent=libevent_path”即可,如果采用yum安装只需要“yum -y install memcached”安装即可。下边介绍几个常用选项:
-l IP:监听在哪个ip地址
-d:运行为守护进程
-u:以指定的用户身份运行
-m <num>:缓存服务器所使用的内存大小,默认为64MB
-c<num>:服务器的最大并发数,默认为1024
-p <num>:监听的TCP端口,默认为11211
-U <num>:监听的UDP端口,0表示禁用
-M <num>:内存耗尽时返回错误而非删除缓存对象
-f <num>:指定增长因子,默认为1.25
-n:chuck起始大小,默认为48
memadmin-master这是一个能监控memcached的图形化工具,十分易用。
参考文献:http://kb.cnblogs.com/page/42732/
本文出自 “专注运维,与Linux共舞” 博客,请务必保留此出处http://zhaochj.blog.51cto.com/368705/1651261
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。