1.memcached是什么?
Memcached是一个开源的,支持高性能,高并发的分布式缓存系统,。软件名称,前三个字符的单词Mem就是内存的意思,接下来的后面5个字符Cache的单词Cache就是缓存的意思
,最后一个单词d是daemon的意思代表是服务端守护进程模式服务
Memcached服务分为服务端和客户端两部分:
服务端软件的名字形如Memcached-1.4.24.tar.gz
客户端软件的名字形如Memcache-2.25.tar.gz

2.互联网企业场景常见内存缓存软件相关对比信息
在这里插入图片描述
3.memchache在web架构中的运用
方案一:
在这里插入图片描述
这种方式是通过程序来实现 DB和memcache数据的一致的
浏览器修改数据的时候,同时通知DB和memcache对数据进行变更
DB和memcache相互之间的数据要一直保持一直,不管是增删改

因此,浏览器再访问的时候,首次访问:从RDBMS中取得数据保存到memcached
第二次后:从memcached中取得数据显示页面

这样数据直接读取Memcached缓存数据,大大的减轻了后端数据库的压力,并提高了整个网站的响应熟读,提升了用户体验

方案二:
在这里插入图片描述
这种方案 memcached作为缓存应用通过软件更新数据流程
类似于把memecache作从库 通过触发的功能实现 redis没办法实现,要实现要进行二开
生产工作中方案一常用,只需通过程序维护memcached缓存

4.memcache作为数据库的查询数据缓存
4.1完整数据缓存
例如:电商的商品分类功能不能经常变动,就可以事先放到Memcached里,然后再对外提供数据访问。这个过程被称之为"数据预热"。
为什么商品分类数据可以事先存到缓存里呢?
因为,商品分类数据几乎都是由内部人员管理的,如果需要更新数据,更新数据库后,就可以把数据同时更新到Memcached里。
如果把商品分类数据做成静态化文件,然后,通过前端WEB缓存或者使用CDN加速效果更好
因此变化不大的数据可以放到memcache中
4.2 热点数据缓存
热点数据缓存一般是用于由用户更新的商品,例如淘宝的卖家,当卖家新增商品后,网站程序员就会把商品写入后端数据库,同时把这部分数据,放入Memcached内存中,下一次访问这个程序的请求就直接从Memcached内存中取走了,这种方法用来缓存网站热点的数据,即利用Memcached缓存经常被访问的数据。
特别提示:这个过程可以通过程序实现,也可以在数据库上安装相关软件进行设置,直接由数据库把内容更新到Memcached中,相当于Memcached是MySQL的从库一样
淘宝,京东,小米等电商双11,秒杀抢购场景:
如果碰到电商双11,秒杀高并发的业务场景,必须要事先预热各种缓存,包括前端的Web缓存和后端的数据库缓存
先把数据放入内存预热,然后在逐步动态更新。先读取缓存,如果缓存里没有对应数据,再去读取数据库,然后把读到的数据放入缓存。如果数据库里的数据更新,需要同时触发缓存跟新,防止给用户过期的数据,当然对于百万级别并发还有很多其它的工作要作。

5.作为集群节点的session会话共享存储
即把客户端用户请求多个前端应用服务集群产生的session会话信息,统一存储到一个Memcached缓存中。
由于session会话数据是存储在内存中,所以很快

6.memcached作为高并发,高性能的缓存服务,具有如下特征:
6.1 协议简单:
memcached的协议实现简单,采用基于文本行的协议,能通telnet/nc等命令作为Memcached服务器存取数据
6.2 支持epoll/kqueue异步I/O模型,使用libevent作为事件处理通知机制
6.3 key/value键值数据类型,被缓存的数据以key/value键值形式存在的,例如:
a->36 key=a value=36
6.4 全内存缓存,效率高
Memcached管理内存的方式非常高效,即全部的数据都存放于Memcached服务事先分配好的内存中,无持久化存储的设计和系统的物理内存一样,当重启系统或Memcached服务时,Memcached内存中的数据会丢失
如果希望重启后,数据依然保留,那么就可以采用redis这样的持久化内存缓存系统
当内存中缓存的数据容量达到服务启动时设定的内存值时,就自动使用LRU算法删除过期的缓存数据。也可以在存放数据时对存储的数据设置过期时间,这样过期后数据就自动被清除,Memcached服务本身不会监控数据过期,而是在访问的时候查看key的时间戳判断是否过期
最近最少被使用的数据会清除LRU算法,留下热点数据
6.5 可支持分布式集群
Memcached没有像MySQL那样的主从复制方式,分布式Memcached集群的不同服务器之间是互不通信的,每个节点都是独立存取数据,并且数据内存也应该是不一样的。通过对Web应用端的程序设计或者通过支持hash算法的负载均衡软件,可以让Memcached支持大规模海量分布式缓存集群应用
memcache集群,不同的memcache服务器存不同的数据,数据总和尽可能接近数据库
6.5.1下面是利用Web端程序实现Memcached分布式的简单代码:
“memcached_servers” => array(
‘10.4.4.4:11211’,
‘10.4.4.5:11211’,
‘10.4.4.6:11211’,
);
6.5.2 使用tengine反向代理负载均衡的一致性哈希算法实现分布式Memcached的配置
http {
upstream test {
consistent_hash $request_uri;
server 127.0.0.1:11211 id=1001 weight=3;
server 127.0.0.1:11211 id=1002 weight=10;
server 127.0.0.1:11211 id=1003 weight=20;
}
}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐