精华内容
下载资源
问答
  • php自带缓存扩展-APCu

    千次阅读 2019-04-29 18:14:38
    在很多业务中,咱们都会碰到需要缓存数据的时候,而缓存方案有很多,也可以借助redis,memcache等第三方来进行缓存 本文主要讲解APCu扩展的缓存 扩展下载地址:http://pecl.php.net/package/APCu php.ini需要配置:...

    在很多业务中,咱们都会碰到需要缓存数据的时候,而缓存方案有很多,也可以借助redis,memcache等第三方来进行缓存

     

    本文主要讲解APCu扩展的缓存

     

    扩展下载地址:http://pecl.php.net/package/APCu

    php.ini需要配置:

    extension=php_apcu.dll

    apc.enabled=1

    apc.shm_size=32M

    apc.enable_cli=1

    具体配置可查看http://php.net/manual/zh/apcu.configuration.php

     

    函数:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    apcu_add -数据存储中缓存的新变

    apcu_cache_info -检索缓存的信息从APCu的数据存储  获取数据存储列表(不会返回value),只有定义值的信息

    apcu_cas更新旧值和新值

    apcu_clear_cache -清除缓存的

    apcu_dec -减少存储的值(必须数值型)

    apcu_delete -删除存储变量从缓存

    apcu_entry -自动读取或生成一个缓存条目

    apcu_exists -检查项目存在

    apcu_fetch从缓存取存储变量

    apcu_inc增加存储的值(必须数值型)

    apcu_sma_info -检索高招共享内存分配信息

    apcu_store -数据存储区中的缓存变量

    具体说明可查看:http://php.net/manual/zh/book.apcu.php

    示例

    1

    2

    3

    4

    $key='tioncico';

    $value='仙士可';

    var_dump(apcu_store($key $value));

    var_dump(apcu_fetch( $key ));

    使用web方式访问(注意,php-cli访问结束后无法保存缓存值):

    仙士可博客

    然后注释掉apcu_store

    1

    2

    3

    4

    $key='tioncico';

    $value='仙士可';

    //var_dump(apcu_store($key , $value));

    var_dump(apcu_fetch( $key ));

    使用web方式访问,正常输出

    仙士可博客

     

    其他函数可自测

    注意:php-cli模式运行不能保存到下次运行

     

    在FastCGI模式下重启后将会清除缓存

    展开全文
  • 我们也有自带缓存系统:PHP的APCu扩展想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小...

    我们也有自带的缓存系统:PHP的APCu扩展

    想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小项目中,PHP 也已经为我们准备好了一套简单的缓存系统,完全能够应付我们日常普通规模站点的开发。这一套扩展就是 APCu 扩展。

    APCu 扩展

    APCu 扩展是 APC 扩展的升级,APC 扩展已经不维护了。这两套扩展其实都是基于 opcode caching 。也就是 PHP 自身的 opcode 来实现的缓存能力。

    APCu 的安装就和普通的 PHP 扩展一样,非常简单,最主要的是这个扩展还非常的小。不管下载还是安装都是秒级可以完成的。所以说能够非常方便的应用于小规模的项目,而且是 PHP 原生支持的,不需要额外的端口之类的配置。

    方法说明

    缓存系统一般都会有的增加、删除、查询、自增等功能都在 APCu 扩展中有对应的实现。

    • apcu_add — 创建一个新的缓存

    • apcu_cache_info — 查看 APCu 的全部缓存信息

    • apcu_cas — 更新一个缓存的值为新值

    • apcu_clear_cache — 清除全部的缓存

    • apcu_dec — 自减缓存值

    • apcu_delete — 删除一个缓存的内容

    • apcu_enabled — 当前环境下是否启用 APCu 缓存

    • apcu_entry — 原子地生成一个缓存实体

    • apcu_exists — 检查缓存是否存在

    • apcu_fetch — 查询缓存

    • apcu_inc — 自增缓存值

    • apcu_sma_info — 查询缓存的共享内存信息

    • apcu_store — 保存一个缓存

    使用演示

    apcu_add("int", 1);
    apcu_add("string", "I'm String");
    apcu_add("arr", [1,2,3]);
    
    class A{
        private $apc = 1;
        function test(){
            echo "s";
        }
    }
    
    apcu_add("obj", new A);
    
    var_dump(apcu_fetch("int"));
    var_dump(apcu_fetch("string"));
    var_dump(apcu_fetch("arr"));
    var_dump(apcu_fetch("obj"));
    

    正常的使用都是比较简单的,我们添加各种类型的数据都可以正常存入缓存。不过需要注意的是,我们可以直接保存对象进入 APCu 缓存中,不需要将它序列化或者JSON成字符串,系统会自动帮我们序列化。

    apcu_add(string $key , mixed $var [, int $ttl = 0 ]) 方法就是普通的添加一个缓存,$ttl 可以设置过期时间,也是以秒为单位,如果不设置就是长期有效的。注意,APCu 的缓存时限在一次 CLI 中有效,再调用一次 CLI 取不到上次 CLI 中设置的缓存内容。而在 PHP-FPM 中,重启 PHP-FPM 或 FastCGI 之后缓存会失效。

    接下来我们重点测试一下几个不太常见的方法。

    apcu_cas("int", 1, 2);
    var_dump(apcu_fetch("int"));
    
    // Warning  apcu_cas() expects parameter 2 to be int
    apcu_cas("string", "I'm String", "I'm  New String");
    

    apcu_cas(string $key , int $old , int $new) 是将一个 $old 值修改为 $new 值,它只能修改数字类型的内容,如果是字符串的修改会报错。这个函数有什么优势呢?它最大的优势是原子性的,也就是不受高并发的影响。与之类似的是 apcu_store(string $key , mixed $var [, int $ttl = 0 ]) 方法,不过这个方法只是简单的修改一个缓存的内容,如果这个缓存的键不存在的话,就新建一个,它不受类型的限制,当然也不具有原子性。

    apcu_entry("entry", function($key){
        return "This is " . $key;
    });
    var_dump(apcu_fetch("entry"));
    

    apcu_entry(string $key , callable $generator [, int $ttl = 0 ]) 这个函数的作用是如果 $key 这个缓存不存在,则执行 $generator 这个匿名函数,并将 $key 做为键值传递进去,然后生成也就是 return 一个内容做为这个缓存的值。

    var_dump(apcu_cache_info());
    

    最后,如果我们想查看当前系统中的所有 APCu 缓存信息的时候,直接用这个 apcu_cache_info() 函数即可。

    总结

    当缓存中的数据非常多时,它还提供了一个 APCUIterator 迭代器方便我们进行缓存信息的循环查询及相关统计。总之,这一套系统是非常方便的一套小规模的缓存系统,在日常开发中完全可以尝试用到一些小功能上。

    测试代码:

    https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/%E6%88%91%E4%BB%AC%E4%B9%9F%E6%9C%89%E8%87%AA%E5%B8%A6%E7%9A%84%E7%BC%93%E5%AD%98%E7%B3%BB%E7%BB%9F%EF%BC%9APHP%E7%9A%84APCu%E6%89%A9%E5%B1%95.php

    参考文档:

    https://www.php.net/manual/zh/function.apcu-entry.php

    展开全文
  • php缓存机制

    2018-04-10 16:12:00
    开始之前先看下php自带缓存指令: ob_start() //开启缓存 php.ini中一般是4096 ob_clean() //清空缓存 ob_end_clean() //清空缓存,关闭缓存 ob_flush() //刷新缓存(将缓存现有内容输出) 把php缓存写入apahce/...

    开始之前先看下php自带缓存指令:

    ob_start()  //开启缓存 php.ini中一般是4096

    ob_clean()  //清空缓存

    ob_end_clean()  //清空缓存,关闭缓存

    ob_flush() //刷新缓存(将缓存现有内容输出)  把php缓存写入apahce/nginx缓存

    flush() //把apahce/nginx缓存写入浏览器缓存

    ob_end_flush()  //刷新缓存,并关闭缓存

    $contents = ob_get_contents() //获得缓存内容

    所有的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”。

    但是我们执行下面的代码的时候,并不是显示“1”之后1秒再显示“2”,而是等待5秒后直接显示“12”

    echo '1';
    sleep(1);
    echo '2';

    这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好。

    通常情况下,我们的web应用由以下几个要素构成:

    php->apache->浏览器。这篇文章我们就以这个架构为例来讲解数据是如何在整个“链条”上流通的。

     

     

    看了上面的图,我们终于知道上面为什么会同时显示“12”了,因为echo '1'还没有装满php的缓存,所以“1”还在php的缓存里面,没有到浏览器,等到程序结束后“12”才一起到浏览器。

    当然我们也可以手动刷新缓存

    echo '1';
    ob_flush(); //把php缓存写入apahce缓存
    flush(); //把apahce缓存写入浏览器缓存
    sleep(1);
    echo '2';

    我们把代码改成如上之后,浏览器还是要等1秒才同时显示“12”,这是因为“1”虽然已经发送给浏览器,但是浏览器缓存还没有装满,并没有渲染,一直到等到程序结束后才渲染出“12”。

    我们以谷歌浏览器为例(缓存1000bytes),通过下面的代码,我们就可以实现先显示“1”,隔1秒再显示“2”

    for($i=1;$i<11;$i++){
        echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满
        ob_flush(); //把php缓存写入apahce缓存
        flush(); //把apahce缓存写入浏览器缓存
        sleep(1);
        echo $i;
    }

    讲到这里,我们不得不提一下“ob_start()”这个函数,这个函数的作用就是开启一个新的php缓存。我们还是通过代码来说明

    ob_start();
    for($i=1;$i<11;$i++){
        echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满
        ob_flush(); //把php缓存写入apahce缓存
        flush(); //把apahce缓存写入浏览器缓存
        sleep(1);
        echo $i;
    }

    在原有的基础上我们仅仅加了个ob_start(),结果又变成了等1秒后同时显示"1234"了,(需要将1000改为4096才会1秒显示I个)。这是因为每一个ob_start()都在原来的缓存空间上开辟一个子缓存空间,ob_flush()是把当前缓存空间输出到上级缓存空间,php只有一个缓存空间的时候,上级缓存空间就是apache的缓存,当php有多个缓存空间的时候,ob_flush()的就不能把php缓存写入apache缓存了

     

    转载于:https://www.cnblogs.com/lauhp/p/8780046.html

    展开全文
  • wordpress自带有缓存体系,关键的函数你可以在wp-includes/cache.php或 Codex里查找到所有的函数。 你可以使用下列函数来实现添加缓存。 复制代码代码如下:wp_cache_add($key, $data, $flag = ”, $expire = 0)相反...
  • PHP缓存机制详解

    2018-11-02 15:30:00
    一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来... output buffer是php自带缓存,可以通过配置php.ini关闭,程序缓存是一直开启状态,没法关闭。程序缓存中内容没法修改,output buffer中内容可以修改,...

    一,PHP缓存机制详解

          我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用。

          output buffer是php自带缓存,可以通过配置php.ini关闭,程序缓存是一直开启状态,没法关闭。程序缓存中内容没法修改,output buffer中内容可以修改,修改完成后全部发给程序缓存。

          当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方 怎么干。HTTP传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必须的。一个网页对应一个消息,发送消息时候,一般来说,都是先消息头部分,在消息头部分指明了 消息体部分的长度,然后使用\r\n\r\n来表示消息头部分结束,接下来是消息体部分。如果没有定义消息头,发送默认的消息头。

          由图可知,浏览器向apache发送http请求后,apache根据httpd.conf文件,将请求转发给php处理模块,php处理模块根据php.ini处理test2.php,如果php.ini关闭output buffer,那么php处理模块将信息头部和信息内容直接发送给程序缓存,如果php.ini开启output buffer,那么php处理模块将信息头部和信息内容直接发送给Output buffer,Output buffer接收完后再发送给程序缓存。

    通过以下实例学习消息与php缓存,配置php.ini。

    (1)php.ini,output_buffering=off,关闭php缓存;

    (2)display_errors = on,显示错误;

    (3)error_reporting=E_ALL & ~E_NOTICE,表示所有非NOTICE级别的错误日志都打印出来;

    之后执行以下代码。

    1
    2
    3
    4
    5
    <?php
    echo “aaa”;
    header(“content-type:text/html;charset=utf-8”);
    echo “hello”;
    ?>

      这段程序报警告。PHP处理模块一边处理程序,一边将处理结果发送到程序缓存,处理第1行,将默认消息头以及aaa作为消息体一部分发送到程序缓存,执行第2行,再次发送消息头,此时程序缓存中有消息头了,且没法修改,此时报警告。因此可以在程序中将output buffer开启,

    1
    2
    3
    4
    5
    6
    <?php
    ob_start();
    echo “aaa”;
    header(“content-type:text/html;charset=utf-8”);
    echo “hello”;
    ?>

      执行第1行开启缓存,执行第2行,将默认消息头以及aaa作为消息体一部分发送给output buffer,执行第3行,修改消息头,执行第4行,将hello发送给output buffer,程序执行完后,output buffer将消息发送给程序缓存,程序缓存输出。

    二,下面是一些php自带缓存指令:

    ob_start()  //开启缓存

    ob_clean()  //清空缓存

    ob_end_clean()  //清空缓存,关闭缓存

    ob_flush() //刷新缓存(将缓存现有内容输出)

    ob_end_flush()  //刷新缓存,并关闭缓存

    $contents = ob_get_contents() //获得缓存内容

    file_put_contents("d:/log.txt",$contents) //将缓存内容打印到文本

    三,flush与ob_flush区别

    flush()是输出程序缓存指令;

    ob_flush()是输出自带缓存指令;

    转载于:https://www.cnblogs.com/apolloren/p/9896516.html

    展开全文
  • 最近开始研究php缓存技术,来个系统自带的OPcache 最近开始研究php缓存技术,来个系统自带的OPcache php5.5以上版本 系统自带 PHP5.2-5.4 可通过扩展来安装 OPcache是 zend出品 比apc的优势在于 ...
  • asp强大的application 是 php 中所没有的。昨天朋友抱怨他的人才网站读取速度慢,于是我帮他把asp中读库比较费时的部分用application做了缓存
  • 写在开始:缓存变量和session变量都是全局性质的,TP都是默认开启的,设置了之后可以在任何你想要的地方直接...1、动态缓存 Cache缓存类(使用之前,你需要下载Xcache模块、PHP的Xcache驱动以及一系列配置,自行...
  • 说到缓存,方法却是很多,从数据库到文件到内存,再分N种缓存技术,比如php自带的file_put_contents(文件缓存),以及最常见的memcached、APC、redis(内存缓存)等等。选择哪一种缓存:确实任何一种缓存技术都可能...
  • 1、路由缓存(路由中不能含有匿名函数、include包含文件)【缓存文件位置bootstrap\cache\routes.phpphp artisan route::cache 2、配置缓存缓存文件位置bootstrap\cache\config.phpphp artisan config:...
  • php内存缓存实现方法

    2021-01-21 16:05:55
    本文要来讲述关于php中内存缓存的一些方法,这里我们将介绍Memcached缓存php自带的APC缓存方法. 1.Memcached缓存。 memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高...
  • #php缓存机制#

    2019-03-31 06:14:56
    自带缓存:英文名output buffer ,里面的内容可以修改,可控制开启和关闭 程序缓存: 一直开启,没法关闭,无法修改里面的内容 。 2:原理: 开启自带缓存场景:内容先到达自带缓存中,然后输出到程序缓存,到达...
  • asp强大的application 是 php 中所没有的。昨天朋友抱怨他的人才网站读取速度慢,于是我帮他把asp中读库比较费时的部分用application做了缓存。大致方式如下:函数getcache,会自动建立需要的缓存。Function get...
  • wordpress自带有缓存体系,关键的函数你可以在wp-includes/cache.php或 Codex里查找到所有的函数。你可以使用下列函数来实现添加缓存。复制代码代码如下:wp_cache_add($key, $data, $flag = '', $expire = 0)相反的...
  • PHP的OB缓存(输出缓存)

    2016-03-12 09:49:00
    使用PHP自带缓存机制 原则:如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器。 OB(输出缓存缓存...
  • 2、安装memcache服务端(参照https://www.cnblogs.com/winstonsias/p/10190745.html)及php扩展(参照https://www.cnblogs.com/winstonsias/p/10193781.html) 3、添加服务提供类MemcacheServiceProvid...
  • php缓存控制

    2013-12-17 11:16:05
    今天同事说需要在浏览器及时打印出现在...使用php自带的ob系列函数就可以了。 我实现的代码如下: 1 //先填充好buffer,防止需要及时输出的东西被放到了buffer中去 start 2 ob_start(); 3 $buffer_size = ini_ge
  • php字节码缓存之opcache

    2021-06-17 11:26:05
    PHP5.5 以后官方自带了一个组件叫 Zend Opcache,具体可以参看官方文档(https://www.php.net/manual/zh/book.opcache.php)。开启此扩展后可以提高 PHP 的执行效率。 Opcache是字节码缓存PHP在被编译的时候,首先会...
  • laravel自带memcached没有win版,memcache又没定义 踩过这个坑,所以从其他地方转了这篇文章 1、首先弄清楚memcache和memcached的区别(小白谈memcache和memcached的区别) 2、安装memcache服务端(参照...
  • php开启opcache缓存加速

    2020-01-25 01:54:16
    PHP属于解释型语言,在执行代码过程中,翻译器并不产生目标机器代码,而是...PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的),PHP5.5之后opcache可以直接--enable-opcache。对于PHP 5....
  • phpweb自带静态一键生成 文件 覆盖到 网站根目录 即可 如 后台已登录 请 清空下缓存 在刷新下 phpweb 网站 默认生成 静态的页面:(包含模块 page news photo product shop down job view) 网站首页; 频道...
  • PHP开启OPcache缓存支持

    千次阅读 2018-01-04 10:13:17
    修改php.ini文件: zend_extension=php_opcache.dll; opchahe.enable=1;... 此功能PHP5.5及以上版本自带,5.2~5.4版本可使用PECL扩展中的OPcache库; 2.建议在开发环境下,关闭该功能以便调试。
  • PHP的另一个高效缓存扩展:Yac之前的文章中我们已经学习过一个 PHP 自带的扩展缓存 Apc ,今天我们来学习另一个缓存扩展:Yac 。什么是 Yac从名字其实就能看出,这又是鸟哥大...
  • 推荐地址:... 目前用于Web的缓存系统很多,包括squid、varnish、Nginx自带的proxy_cache、FastCGI中的fastcgi_cache、APC、Xcache等。  像squid、varnish、Nginx自带的proxy

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475
精华内容 190
关键字:

php自带缓存