企业—MemCache缓存加速简介
一.MemCache简介
1.MemCache的应用场景
-
由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如:
-
1)对数据库的高并发读写:
关系型数据库本身就是各庞然大物,处理过程非常耗时(如解析SQL语句,时务处理等)。如果对关系型数据库进行高并发读写(每秒上万次的访问),那么它是无法承受的。 -
2)对海量数据的处理:
对于大型的SNS网站,每天有上万次的数据产生(如twitter,新郎微博),对于关系型数据库,如果在一个有上亿条数据表中查找某条记录,效率非常低。
使用memcache能很好的解决以上问题
- 在实际使用中,通常把数据库查询的结果保存在memcache中,下次访问的时候直接在memcache中直接调用,而不再数据库进行查询操作,这样就在很大程度上减少了数据库的负担。
- 保存在memcache中的对象实际放置在内存中,这也是memcache如此高效的原因。
2.MemCache定义
-
Memcache是一个自由,源码开放,高性能,分布式的分布式内存对象缓存系统,用于动态web应用来减轻数据库的负载,它通过在内存中缓存数据的对象来减少读取数据库的次数,从而提高了网站的访问速度。
-
MemCache是一个存储键值对的HashMap,在内存中对任意的数据所使用的key-value存储,数据可以来自数据库调用,API调用,或者页面渲染的结果。
-
MemCache的理念就是小而强大,它简单的设计促进了快速部署,易于开发并解决面对的大规模的数据缓存的许多难题,而所开放的API使得Memcache能用于java,C/C++/C#,Perl,Python,Ruby等大部分流行的程序语言。
-
MemCache会在内存中开辟一块空间,建立一个巨大的hash表,hash表能够用来存出各种格式的数据,包括图像,视频,文件以及数据库检索的结果。
3.MemCache和memcached
MemCache是这个项目的名称,而Memache是服务器端的主程序名称。
二.MemCache的工作流程
- 客户端请求数据
- 检查MemCached中是否有对应数据
- 有的话直接返回,结束
- 没有的话,去数据库里请求数据
- 将数据写入MemCached,供下次请求时使用
- 返回数据,结束
注:缓存到MemCached中的数据库数据,在更新数据库时要注意同时更新MemCached
三.MemCache的工作原理
MemCache采用了C/S架构,在server端启动后,以守护程序的方式监听客户端的需求。启动时可以指定监控的IP(服务器的内网ip/外网ip),端口号(所以做分布式测试时,一台服务器上可以启动多个不同端口号的MemCached进程),使用的内存大小等关键参数。一旦启动,服务器就处于可用的状态。
为了提高性能,Memache缓存的数据全部存储在memcache的内存中,所以重启服务器之后缓存数据会清空,不支持持久化。
1.MemCache的内存管理
- MemCache将内存空间分为ie一组slab
- 每个slab下又有若干个page,每个page默认时1M,如果一个slab占用100M内存的话,那么这个salb下面应该有100个page
- 每个page里面包含一组chunk,chunk是真正存放数据的地方,同一个slab里面的chunk的大小是固定的
- 有相同大小chunk的slab备组织在一起,成为slab_class
2.MemCache分布式
- 为了提升MemCache的存储容量和性能,因此应用的客户端可能会对应多个MemCached服务器来提供服务,这就是MemCached的分布式。