LNMP架构(2) ——php + memcache的结合(memcache的介绍)

一、Memcache简介

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。
MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

memcache和memcached区别:

memcache是项目的名称
memcache是服务器端可以执行的文件的名称

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.3 Memcache作用/h2>

在启动Memcached时,会指定一个内存大小参数,然后会被分配一个内存空间。
当我们读取数据库后的业务数据,放入Memcached缓存中,下一次请求同样数据的用户,直接去Memcachd取数据返回给用户。
(1)对于用户来说,用户访问网站更快了,体验更好了。
(2)数据库压力降低了,内存没有的时候,就会请求数据库。
(3)提升网站并发访问,服务器数量变少。

1.4 MemCache的工作流程

1.5 实验思想

osi七层模型每一层都会加上属于自己的缓存
现在我们给lnmp中的php和nginx可以加上缓存,最后将mysql加上缓存
服务器一般不会把数据直接存储在自己上面,存储有专门的地方
交叉存储可以保证正常运行,数据共享,都会存储一份,本地存储+交叉存储
当服务器和自己的存储设备都坏了,也可以在其他服务器的存储器上找到自己的数据,可以保证客户正常访问

如何给php加缓存
从初级php开始,再到nginx,再到后端服务器,一级一级加上缓存,客户访问的速率会越来越快
现在我们先给php加上缓存,使用memcache这个工具缓存,相当于mysql
(类似于加在前端的varnish,用来把数据缓存在内存里面,一旦重启数据都没有了)
数据是缓存在内存里面的,用户请求的时候直接读取缓存

1.6.互联网常见缓存软件

Memcached 纯内存 用来缓存后端数据库的数据(用户信息,帖子,博文等)
Memcachedb 内存+磁盘 新浪开发,Memcacehd+BDB 缓存后端数据库数据,直接做数据库用
Redis 内存+磁盘 作用同Memcachedb 主从复制,数据类型更丰富。
squid 内存+磁盘
varinish 内存 缓存静态图片,JS,CSS,HTML,视频等。CDN就是利用这类软件做的分布式缓存。

二、php增加memcache模块

客户端:

将php的bin目录路径增加到~/.bash_profile中,为了方便调用

1.搭建memcache模块

2.修改php主配置文件,增加memcache模块

3.重新加载php-fpm服务

LNMP架构(2) ——php + memcache的结合(memcache的介绍)

LNMP架构(2) ——php + memcache的结合(memcache的介绍)

LNMP架构(2) ——php + memcache的结合(memcache的介绍)
表示配置成功,若提示:Sorry, the page you are looking for is currently unavailable. Please try aga…,可以使用命令/etc/init.d/php-fpm start启动php-fpm再试即可成功

再打开一个页面访问http://192.25.63.1/example.php,多次刷新,返回memcache页面刷新可以看到命中率接近100%,访问次数越多从缓存中读取的数据越大。

12.客户端测试

测试访问没有经过memcache的php页面时,发现速度很慢而且很多失败的:

[root@foundation63 kiosk]# ab -c 10 -n 5000 http://172.25.63.1/index.php ##压力测试

LNMP架构(2) ——php + memcache的结合(memcache的介绍)
测试访问有memcache的php页面时,发现速度很快而且没有失败的:

[root@foundation63 kiosk]# ab -c 10 -n 5000 http://172.25.63.1/memcache.php

LNMP架构(2) ——php + memcache的结合(memcache的介绍)

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8577 人正在系统学习中

来源:chd_xu

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月7日
下一篇 2020年8月7日

相关推荐