设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] Memcached缓存服务器介绍

[复制链接]

尚未签到

发表于 2018-12-25 14:02:30 | 显示全部楼层 |阅读模式
  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 :缓存服务器所使用的内存大小,默认为64MB
  -c:服务器的最大并发数,默认为1024
  -p :监听的TCP端口,默认为11211
  -U :监听的UDP端口,0表示禁用
  -M :内存耗尽时返回错误而非删除缓存对象
  -f :指定增长因子,默认为1.25
  -n:chuck起始大小,默认为48
  

  memadmin-master这是一个能监控memcached的图形化工具,十分易用。
  参考文献:http://kb.cnblogs.com/page/42732/




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655771-1-1.html 上篇帖子: 启动memcached脚本 下篇帖子: memcached缓存基本概念
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表