文章目录
- 1 Memcache介绍
-
- 1.1 MemCache一次写缓存的流程
- 1.2 介绍一下MemCache和MemCached的区别
- 1.3 Memcache作用/li>
- 1.4 MemCache的工作流程
- 1.5 Memcache特性和限制
- 1.6 实验思想
- 2.互联 常见缓存软件
- 3 搭建memcache
1 Memcache介绍
Memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多 站使用以提升 站的访问速度
尤其对于一些大型的、需要频繁访问数据库的 站访问速度提升效果十分显著 ,这是一套开放源代码软件,以BSD license授权发布
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了 站访问的速度
MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储
数据可以来自数据库调用、API调用,或者页面渲染的结果
MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题
而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言
Memcache是一款开源的、高性能的纯内存缓存服务软件,Memcache项目诞生于2003年。Mem就是内存的意思,cache是缓存的意思,d是daemon的意思。Memcache服务分为服务端和客户端两部分,C/S模式。
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了 站访问的速度
1.1 MemCache一次写缓存的流程
1)应用程序输入需要写缓存的数据
2)API将Key输入路由算法模块,路由算法根据Key和MemCache集群服务器列表得到一台服务器编
3)由服务器编 得到MemCache及其的ip地址和端口
4)API调用通信模块和指定编 的服务器通信,将数据写入该服务器,完成一次分布式缓存的写操作
读缓存和写缓存一样,只要使用相同的路由算法和服务器列表,只要应用程序查询的是相同的Key,MemCache客户端总是访问相同的客户端去读取数据,只要服务器中还缓存着该数据,就能保证缓存命中
这种MemCache集群的方式也是从分区容错性的方面考虑的,假如Node2宕机了,那么Node2上面存储的数据都不可用了,此时由于集群中Node0和Node1还存在,下一次请求Node2中存储的Key值的时候,肯定是没有命中的,这时先从数据库中拿到要缓存的数据,然后路由算法模块根据Key值在Node0和Node1中选取一个节点,把对应的数据放进去,这样下一次就又可以走缓存了,这种集群的做法很好,但是缺点是成本比较大。
1.2 介绍一下MemCache和MemCached的区别
服务端软件:memcached(连接php)
客户端软件:memcache(主程序)
(1)MemCache是项目的名称
(2)MemCached是MemCache服务器端可以执行文件的名称
1.3 Memcache作用/h2>
这样做的好处/strong>
1.4 MemCache的工作流程
客户端把请求先发送给代理服务器(一般是nginx)
先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作
如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端
同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现)
每次更新数据库的同时更新memcached中的数据,保证一致性 当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略 失效数据首先被替换,然后再替换掉最近未使用的数据
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表
它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等
简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度 Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的 站采用
Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作
1.5 Memcache特性和限制
在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 。
Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存
要使用更多内存,可以分多个端口开启多个Memcached进程
最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA,606024*30控制
最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制
单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制,它是默认的slab大小
最大同时连接数是200,通过 conn_init()中的freetotal进行控制,最大软连接数是1024,通过settings.maxconns=1024 进行控制 跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式
memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快
memcached分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛
memcached作为小规模的数据分布式平台是十分有效果的 memcached是键值一一对应,key默认最大不能超过128个字
节,value默认大小是1M,也就是一个slabs
如果要存2M的值(连续的),不能用两个slabs,因为两个slabs不是连续的,无法在内存中 存储,故需要修改slabs的大小
多个key和value进行存储时,即使这个slabs没有利用完,那么也不会存放别的数据
可支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken
Scheme、Lua、MySQL和Protocol等语言客户端
1.6 实验思想
osi七层模型每一层都会加上属于自己的缓存
现在我们给lnmp中的php和nginx可以加上缓存,最后将mysql加上缓存
服务器一般不会把数据直接存储在自己上面,存储有专门的地方
交叉存储可以保证正常运行,数据共享,都会存储一份,本地存储+交叉存储
当服务器和自己的存储设备都坏了,也可以在其他服务器的存储器上找到自己的数据,可以保证客户正常访问
如何给php加缓存
从初级php开始,再到nginx,再到后端服务器,一级一级加上缓存,客户访问的速率会越来越快
现在我们先给php加上缓存,使用memcache这个工具缓存,相当于mysql
(类似于加在前端的varnish,用来把数据缓存在内存里面,一旦重启数据都没有了)
数据是缓存在内存里面的,用户请求的时候直接读取缓存
2.互联 常见缓存软件
Memcached 纯内存 用来缓存后端数据库的数据(用户信息,帖子,博文等)
Memcachedb 内存+磁盘 新浪开发,Memcacehd+BDB 缓存后端数据库数据,直接做数据库用
Redis 内存+磁盘 作用同Memcachedb 主从复制,数据类型更丰富。
squid 内存+磁盘
varinish 内存
缓存静态图片,JS,CSS,HTML,视频等。CDN就是利用这类软件做的分布式缓存。
3 搭建memcache
以下配置过程中使用到的相关资源是建立在PHP源码编译成功的基础上
(1)解压
(10) 将下面的文件复制到/usr/local/lnmp/nginx/html/默认发布目录下
(13)安装ab命令,压力测试,模拟5000请求量
测试是否加速了访问:
(14)测试没有经过memcache的页面
其实这两个php文件(index.php、example.php)都相当于放在nginx代理服务器下web资源
客户访问的时候先去问nginx代理服务器 如果请求的是静态资源,nginx会直接将静态缓存的资源返回给客户
如果请求的是动态资源,nginx会通过php去找fsatcgi去加载数据库,再把资源给客户端
客户通过php访问后端资源慢,客户通过php的memcache缓存直接访问缓存在内存中的数据很快
类似于在php服务上面加了memcache服务,就可以缓存数据,使的数据的访问更快(也可以说是备份)
其实memcache.php只是一个管理员的页面而已
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!