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

[经验分享] memcached讲解

[复制链接]

尚未签到

发表于 2018-12-24 13:42:14 | 显示全部楼层 |阅读模式
  注意:安装memcached前,memcached用libevent来作事件驱动,所以要先安装libevent
  

  1.memcached是什么,有什么作用?
  

  a.memchached是一个开源的、高性能的缓存软件。
  

  b.memcached通过在事先规划好的内存空间中临时缓存
  

  数据库中的各类数据,已达到减少业务对数据库的直接高
  

  并发访问,从而达到提升数据库的访问性能,加速网站
  

  集群动态应用服务的能力。
  

  2.memcached服务在企业集群架构中应用场景?
  

  (1)作为数据库的前端缓存应用
  

  a.完整缓存(易) 静态缓存
  例如:商品分类,以及商品信息,可事先放到内存里,
  然后在对外提供数据访问,这个被称为预热。用户访问时可以只
  

  读取memcached缓存,不读取数据库了
  b.热点缓存 (难)
  

  需要前端WEB程序配合。只缓存热点的数据,即缓存经常被访问的数据。
  

  先预热数据库里的基础数据库,然后在动态更新。先读取缓存,如果缓存里没有
  

  对应的数据,程序再去读取数据库然后程序把读到的新数据放入缓存存储。
  

  c.对于持久化缓存存储系统,例如redis,可以替代一部分数据库的缓存。
  

  (2)作为集群的session回话共享存储。
  

  http://oldboy.blog.运维网.com/2561410/1331316
  

  http://oldboy.blog.运维网.com/2561410/1323460
  

  3.memcached服务在不同企业业务应用场景中的工作流程?
  

  a.当web程序需要访问后端数据库获取数据时会优先访问Memcached内存缓存,如果
  

  有数据就直接获取返回前端服务及用户;如果没有数据,在由程序请求后端的数据库服务器,
  

  获取到对应的数据后,除了返回给前端的服务及用户外,还会把数据放到memcached内存
  

  中进行缓存,等待下次请求被访问,memcached内存始终是数据库的挡箭牌,从而大大的减轻
  

  数据库的访问压力,提高整个网站架构的响应速度,提升了用户体验。
  

  b.当程序更新,修改或删除数据库中已有的数据时,会同时发送请求通知memcached已经
  

  缓存过同一个ID内容的旧数据失效,从而保证memcached中的数据和数据库的数据一致。
  

  如果在高并发场合,除了通知memcached过期的缓存失效外,还会通过相关机制,使得在
  

  用户访问新数据前,通过程序预先把更新过的数据推送到memcached中缓存起来,这样可以减少
  

  数据库的访问压力,提升memcached中缓存的命中率。
  

  c.有一款数据库插件可以再写入更新数据可后,自动抛给MC缓存起来,自身不cache,类似
  

  inotity。
  

  4.memcached服务分布式集群如何实现?
  特殊说明:memcached集群和web服务集群是不一样的,所有的memcached的数据总和才是
  

  数据库的数据,每台memcached都是部分数据。
  a.程序端实现
  程序加载所有的memcached的ip列表,通过对key做hash(一致性哈希)
  

  b.负载均衡器
  

  通过对key做hash(一致性哈希)
  

  说明:一致性哈希算法的目的不是担保每个对象只请求一个服务器,
  

  而是当节点宕机缓存服务器的更新重新分配比例降到最低
  

  http://blog.csdn.net/cutesource/article/details/5848253
  

  

  5.memcached服务特点及工作原理是什么?
  

  a.C/S模式架构,C语言编写,总共代码2000多行。
  

  b.节点之间相互独立
  

  c.异步I/O模型,使用libevent作为事件通知机制
  

  d.全部数据存放于内存中,无持久性存储的设计,重启服务,数据会丢失
  

  e.当内存中缓存的数据容量达到启动时设定的内存值时,就自动使用LRU算法
  

  删除过期的缓存数据
  

  f.可以对存储的数据设置过期时间,这样过期后的数据会自动被清除,服务本
  

  身不会监控过期,而是在访问的时候查看key的时间戳判断是否过期
  

  g.memcached内存分配机制使对特定的内存进行分块,再把多个块分为一组
  

  h.被缓存的数据以key/vlaue键值形式存在的
  

  

  6.简述memcached内存的管理机原理?
  

  理解为主。早期的malloc分配的内存的,会产生碎片,为提高效率slab就产生了,
  

  slab把内存规划成不同大小的chunk,把相同大小的chunk分成组,然后数据存入的时候
  

  会选择最适合数据大小的chunk存入(数据大小一定小于chunk),会有浪费的空间存在,
  

  然后用factor(chunk大小的增长因子)根据生产环境调试。
  

  命令格式:# memcached -f 1.25 vv
  

  7.memcached对象删除原理与cache机制?
  

  memcached主要的cache机制是LRU(最近次数最少用)算法,加上item(自身)过期失效。
  

  当您存数据到memcached中,可以指定该数据在缓存中可以呆多久 Which is forever,or sime
  

  time in the future. 如果memcached的内存不够用了,过期的slabs会优先被替换,接着就轮到
  

  最老的未被使用的slabs。在某些情况下(完整缓存),如果不想使用LRU算法,那么可以通过"-M"
  

  参数来启动Memcached,这样,Memcached在内存耗尽时,会返回一个报错信息。
  

  例子: -M  retur error on memory exhausted (rather than removing items)
  





运维网声明 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-655354-1-1.html 上篇帖子: Memcached最佳实践二 下篇帖子: Memcached使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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