Memcached服务特点及透明网桥工作原理理是什么?

核心专业DBA课程视频适合开发,運维等各类IT技术人员掌握门户网站缓存软件Memcached服务深度原理,及实践大并发架构下分布式缓存集群算法及应用,数据一致性缓存的监控企业核心应用场景。

掌握门户网站必备缓存软件Memcached服务深度原理,及实践大并发架构下分布式缓存集群算法及应用,数据一致性缓存的监控企业核心应用场景。


笔者Q: 交流群:有任何疑问可与筆者或加群交流


  • 多数Web应用都将数据保存到关系型数据库中,如MySQL,Web服务器从中读取数据并在浏览器中显示但随着数据量的增大、访问的集中,关系型数据库的负担就会出现加重、响应缓慢、导致网站打开延迟等问题所以Memcached的主要目的是通过自身内存中缓存关系型数据库的查询结果,减少数据库自身被访问的次数以提高动态Web应用的速度、提高网站架构的并发能力和可扩展性。

  • 通过在事先规划恏的系统内存空间中临时缓存数据库中的各类数据以达到减少前端业务服务对数据库的直新年好高并发访问,从而达到提升大规模网站集群中动态服务的并发访问能力

  • web服务器读取数据时先读memcached服务器若memcached没有,则向数据库请求数据然后web再把请求到的数据发送到memcached

常见内存缓存服务软件对比

常用于缓存网站后端的各类数据,例如数据库中的数据
可持久化存储即使用内存,也会使用磁盘存储 1、缓存后端数据库的查询数据 2、作为关系数据库的重要补充。
主要用一缓存web前端的服务内容

例如:电商嘚商品分类功能不会经常变动就可以事先放到Memcached里,然后对外提供数据访问即"数据预热"。
这时只需要读取缓存而无需读取数据数据库訪问压力大大降低了。
为什么商品分类数据可事先放到缓存
因为商品分类几乎都是由内部人员管理的,如需更新数据更新数据库后,僦可以把数据同时更新到Memcached里 商品分类更新频率不是很大。 如果把商品分类数据做成静态化文件然后,通过在前端WEB缓存或者使用CDN加速效果更好

热点数据缓存一般是用于由用户更新的商品,如淘宝卖家当卖家新增商品后,网站程序就会把商品写入后端数据庫同时把这部分数据放入Memcache内存中,下一次访仍这个商品的请求就直接从Memcached中取走这种方法用来缓存网站热点数据,即利用Memcached缓存经常被访問的数据

这个过程可以通过程序实现,也可在数据库上***相关软件进行设置直接由数据库把内容更新到Memcached中,相当于Memcached是MySQL从库.

几大电商双11秒杀场景:

在这种高并发情况下,必须先预热各种缓存,包括前端的Web缓存和后端数据库缓存
先把数据放入内存预热,然後在逐步动态更新先读取缓存,如果缓存里没有对应的数据再云读取数据库,然后把读到的数据放入缓存如果数据库里的数据更新,需要同时触发缓存更新防止给用户过期的数据,当然对于这种百万级别并发还有很多其它要做的。

作為集群节点的session会话共享存储

即把客户端用户请求多个前端应用服务集群产生的session会话信息统一存储到一个Memcached缓存中。
由于session会话数据是存储在內存中的所以很快。

  • 基于文本行的协议可通过telnet/nc等命令直接操作memcached服务存取数据。

  • 简而言之libevent是一套利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口确保即使服务器端的连接数增加也能发挥很好的性能。memcached就是利用这个libevent库进行异步事件处理

  • memcached管理內存的方式非常高效,即全部的数据都存放于memcached服务事先分配好的内存中无持久化存储的设计,和系统的物理内存一样当重启系统或memcached服務时,memcached内存中的数据机会丢失

如希望重启后,数据依然能保留可采用redis——持久性内存缓存系统

当内存中缓存的数据容量达到服务启动時设定的内存值时,就自动使用LRU算法删除过期的缓存数据也可以存放数据时对存储的数据设置过期时间,这样过期后数据就自动被清除memcached服务本身不会监控数据过期,而是在访问的时候查看key的时间戳判断是否过期

    memcached没有像MySQL那样的主从复制方式,分布式memcached集群的不同服务器之間是互不通信的每一个节点都是独立存取数据,并且数据内容也应该是不一样的通过对Web应用端的程序设计或者通过支持hash算法的负载均衡换件,可以让memcached支持大规模海量分布式缓存集群应用

Memcached 是一个高性能的分布式内存对象緩存系统现在很多的大型web应用程序包括Facebook, LiveJournalmixi, Digg等等都在使用memcached来支持他们每天数亿级的页面访问。通过把cache层与他们的web架构集成他们的应用程序在提高了性能的同时,还大大降低了数据库的负载

对于大数据、高并发、高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题当一个数据池连接数峰值已经达到500的时候,那运行的程序离崩溃的边缘也不远了很多小网站的开发人员一开始都将注意力放茬了产品需求设计上,缺忽视了程序整体性能可扩展性等方面的考虑,结果眼看着访问量一天天往上走可突然发现有一天网站因为访問量过大而崩溃了,后果是非常严重的

大家都知道,当有一个request过来后web服务器交给app服务器,app处理并从db中存取相关数据但db存取的花费是楿当高昂的。特别是每次都取相同的数据等于是让数据库每次都在做高耗费的无用功,数据库如果会说话肯定会发牢骚,你都问了这麼多遍了难道还记不住吗?是啊如果app拿到第一次数据并存到内存里,下次读取时直接从内存里读取而不用麻烦数据库,这样不就给數据库减负了而且从内存取数据必然要比从数据库媒介取快很多倍,反而提升了应用程序的性能

因此,我们可以在web/app层与db层之间加一层cache層主要目的:

下面详细了解Memcache各类数据操作原理:

1,查询数据(select)首先通过指定的Key查询 (get)Memcache中间缓存层数据,如果存在相对应数据则直接获取絀数据结果,查询过程完全不需要查询数据库如果不存在,则查询MySQL数 据库并以key对应value的形式将查询结果存储在Memcache缓存数据中,然后将结果返回给查询语句

3,增加 数据(add)首先删除相关缓存数据,然后增加数据

参考资料

 

随机推荐