php服务缓存加速

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

PHP服务加速缓存优化

    PHP缓存原理:

        当客户端请求一个PHP程序时,服务器的PHP引擎会解析改PHP程序,并将其编译为特定的操作码(Operate Code 简称 opcode),

    改文件是执行PHP代码后的一种二进制表示形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃。而操作码缓存的原理:

    将编译后的操作码保存下来,并放到共享内存中,下一次调用PHP时重用。(节省了PHP引擎的编译时间)

    LA(N)MP环境PHP缓存加速器的原理:

    1)apache(nginx)接收到客户端的PHP程序访问请求。

    2)apache(nginx)把程序传递给PHP处理模块libphp5.so(php的FCGI--php-fpm)进程。

    3)PHP引擎(php-fpm进程)读取磁盘上的PHP文件,并将器加载到内存中解析。

    4)PHP处理模块libphp5.so(php解析器php.ini)将PHP源码编译成cpdode,把cpcode缓存起来。

    5)apache(nginx)接收到客户端的请求后,PHP引擎直接读取opcode文件。如果没有找到则重复1-4步。建立缓存。

补充知识:

    locale 计算机软件运行的语言环境:

        # locale

        LANG=en_US.UTF-8             

        LC_CTYPE="en_US.UTF-8"

        LC_NUMERIC="en_US.UTF-8"

        LC_TIME="en_US.UTF-8"

        LC_COLLATE="en_US.UTF-8"

        LC_MONETARY="en_US.UTF-8"

        LC_MESSAGES="en_US.UTF-8"

        LC_PAPER="en_US.UTF-8"

        LC_NAME="en_US.UTF-8"

        LC_ADDRESS="en_US.UTF-8"

        LC_TELEPHONE="en_US.UTF-8"

        LC_MEASUREMENT="en_US.UTF-8"

        LC_IDENTIFICATION="en_US.UTF-8"

        LC_ALL=


locale 把按照所涉及到的使用习惯的各个方面分成12 大类,这12 个大类分别是:


    语言符号及其分类(LC_CTYPE)

    数字(LC_NUMBERIC)

    比较习惯(LC_COLLATE)

    时间显示格式(LC_TIME)

    货币单位(LC_MONETARY)

    信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)

    行么书写方式(LC_NAME)

    地址书写方式(LC_ADDRESS)

    电话号码书写方式(LC_TELEPHONE)

    度量衡表达方式(LC_MEASUREMENT)

    默认纸张尺寸大小(LC_PAPER)

    对locale 自身包含信息的概述(LC_IDENTIFICATION)


而这些信息的配置通常放在/usr/share/i18n/locales 目录下。

    部分软件需求Perl.为了解决Perl的一些环境问题带来错误。可以通过修改环境变量来避免。

     # echo 'export LC_ALL=C' >> /etc/profile

     # tail  -1 /etc/profile

     # source /etc/profile

    安装Perl相关的软件依赖包  # yum install perl-devel 或 # yum install perl-CPAN

    安装 PHP XCache 缓存加速模块

        X Cache 把PHP程序编译后的数据(opcode)缓存到共享内存里,避免相同的程序重复编译。

        用户请求相同的PHP程序时,可以直接使用缓存中已编译好的数据,提高访问速度。

        # wget https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2 --no-check-certificate

        # tar jxvf xcache-3.2.0.tar.bz2

        # /application/php/bin/phpize 

    phpize 作用:用来扩展PHP扩展模块的,通过phpize可以建立PHP的外挂模块。

        提供软件包平台环境分析和编译安装的必须的工具。

        #./configure --enable-xcache --with-php-config=/application/php/bin/php-config 

        # make

        # make install

        # ll /application/php5.5.38/lib/php/extensions/no-debug-non-zts-20121212/

        看看是否含有 xcache.so 表明 安装是否完成。

    安装数据库缓存及其它PHP扩展插件

        memcached缓存软件:mem内存 cache缓存。d 即daemon(服务器端进程模式服务)

        memcached分2部分:服务器端(memcached)和客户端(memcache)

    一般场景:数据存放在数据库中, web访问的时候,要不停的访问数据库。加入memcached好处:通过自身内存中缓存

    数据库的查询结果,减少数据库的访问次数,访问内存比访问硬盘效率要高。

    memcached的服务的工作步骤:

        1.先检查memcached服务的缓存中是否存在。如果存在直接返回请求数据

        2.memcached不存在数据,访问数据库

        3.数据库取出数据,返回给客户端

        4.同时把新取到的数据缓存一份给memcached服务缓存。备用。

    memcache 客户端PHP扩展插件(memcache2.2.7.tgz)

        # wget http://pecl.php.net/get/memcache-2.2.7.tgz

        # ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

        # make

        # make install

        # ll /application/php5.5.38/lib/php/extensions/no-debug-non-zts-20121212/

        是否包含 memcache.so

    安装:PDO_MYSQL扩展模块

    下载地址:# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

    一般在编译PHP的时候以参数的形式加入此模块:--with-pdo-mysql=mysqlnd

    如果源码包编译安装和前面的安装无异(略步骤)

        平台分析如下:

        # ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql-mysql=/application/mysql

    安装图像处理程序及imagick 扩展模块

        安装图像软件:ImageMagick

        安装imagick模块

        # wget http://pecl.php.net/get/imagick-3.4.3.tgz

        # /application/php/bin/phpize

        # ./configure --with-php-config=/application/php/bin/php-config

    配置模块生效:修改php.ini文件。把加载模块的地址修改。

          extension_dir = "/application/php/lib/php/extensions/no-debug-non-zts-20121212"

          extension=memcache.so

          extension=imagick.so

    配置XCache 插件加速

        1.首先修改 xcache 自带的配置文件  xcache.ini ,然后将修改的文件添加到 php.ini(引擎文件)文件的后面

        # grep -vE "^;|^$" /data/xcache-3.2.0/xcache.ini > xcache.ini.bak

        其中主要修改:一下参数

        xcache.size  =               256M 

        xcache.count =                 2  

        xcache.ttl   =                86400 

        xcache.gc_interval =          3600 

        xcache.var_size  =            64M   


        **** xcache.size   非0表示启用缓存。后面的数值代表允许mmap(一种内存共享机制)的最大值

        xcache.count    官方推荐服务器CPU的个数   # grep -c processor /proc/cpuinfo(匹配CPU个数)

        xcache.ttl    ttl(time to live) 设定cache对象的生存期

        xcache.gc_interval      回收器扫描过期对象回收内存空间的时间间隔(如果设为0.则不回收,启动缓存必须开启回收)

        xcache.var_size        变量的缓存

        # cat xcache.ini.bak >> /application/php/lib/php.ini

        因为 XCache 使用共享内存作为存储空间,如果有必要可以调整共享内存大小参数。

        # tail /etc/sysctl.conf 

        kernel.msgmnb = 65536


        # Controls the maximum size of a message, in bytes

        kernel.msgmax = 65536


        # Controls the maximum shared segment size, in bytes

        kernel.shmmax = 68719476736


        # Controls the maximum number of shared memory segments, in pages

        kernel.shmall = 4294967296

        2.重新启动PHP查看xcache加载情况

        # pkill php-fpm

        # /application/php/sbin/php-fpm 

        # /application/php/bin/php -v

        PHP 5.5.38 (cli) (built: Feb  1 2017 22:43:58) 

        Copyright (c) 1997-2015 The PHP Group

        Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

            with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

            with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        3.配置web界面的查看xcache缓存加速信息。

            修改php.ini 文件中的

            xcache.admin.user = "mOo"    #把mOo 替换

            xcache.admin.pass = "md5 encrypted password"

            # 这里是利用md5算法生成加密串

            例如: 

            # echo -n '123456' | md5sum

            e10adc3949ba59abbe56e057f20f883e  -

            将内容替换成e10adc3949ba59abbe56e057f20f883e

wKioL1iVnzmAZEr1AAExUKyUfh0088.png-wh_50

            引用xcache相关的页面;

            # cd /data/xcache-3.2.0

            # cp -a ./htdocs/ /application/nginx/html/blog/xadmin

            #  chown -R nginx.nginx /application/nginx/html/blog/xadmin

            # pkill php-fpm

            # /application/php/sbin/php-fpm 


    下面附上 :压测效果对比:(昨天为没有加入xcache缓存的数据,右边为加入xcache缓存效果)

wKioL1iVn0_BULmwAAEIbAFhVH8096.png-wh_50










本文转自 swallow_zys  51CTO博客,原文链接:http://blog.51cto.com/12042068/1894905,如需转载请自行联系原作者
相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
266 0
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
262 0
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
|
10月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
343 0
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
412 18
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
414 0
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
285 10
|
缓存 NoSQL PHP
用装饰器模式实现多层缓存:让PHP应用更快更稳
通过装饰器模式实现PHP多层缓存架构,详解如何利用内存、Redis、文件缓存组合提升应用性能。包含设计思路、代码示例与实战效果对比,助您构建高效缓存策略。
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
318 5
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
447 0