知识大全 PHP之APC缓存详细介绍
Posted 函数
篇首语:知识的根是苦的,它的果实是甜的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP之APC缓存详细介绍相关的知识,希望对你有一定的参考价值。
PHP之APC缓存详细介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
APC缓存简介
APC 全称是Alternative PHP Cache 官方翻译叫 可选PHP缓存 它为我们提供了缓存和优化PHP的中间代码的框架 APC的缓存分两部分 系统缓存和用户数据缓存
系统缓存
它是指APC把PHP文件源码的编译结果缓存起来 然后在每次调用时先对比时间标记 如果未过期 则使用缓存的中间代码运行 默认缓存 s(一小时) 但是这样仍会浪费大量CPU时间 因此可以在php ini中设置system缓存为永不过期(l= ) 不过如果这样设置 改运php代码后需要重启WEB服务器 目前使用较多的是指此类缓存
用户数据缓存
缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取 写入的 如果数据量不大的话 可以一试 如果数据量大 使用类似memcache此类的更加专著的内存缓存方案会更好
缓存key生成规则
APC的缓存中的每个slot都会有一个key key是apc_cache_key_t结构体类型 除了key相关的属性 关键是h字段的生成 h字段决定了此元素落于slots数组的哪一个位置 对于用户缓存和系统缓存 其生成规则不同 用户缓存通过apc_cache_make_user_key函数生成key 通过用户传递进来的key字符串 依赖PHP内核中的hash函数(PHP的hashtable所使用的hash函数 zend_inline_hash_func) 生成h值
系统缓存通过apc_cache_make_file_key函数生成key 通过APC的配置项apc stat的开关来区别对待不同的方案 在打开的情况下 即apc stat= On 时 如果被更新则自动重新编译和缓存编译后的内容 此时的h值是文件的device和inode相加所得的值 在关闭的情况下 即apc stat=off时 当文件被修改后 如果要使更新的内容生效 则必须重启Web服务器 此时h值是根据文件的路径地址生成 并且这里的路径是绝对路径 即使你是使用的相对路径 也会查找PG(include_path)定位文件 以取得绝对路径 所以使用绝对路径会跳过检查 可以提高代码的效率
添加缓存过程
以用户缓存为例 apc_add函数用于给APC缓存中添加内容 如果key参数为字符串中 APC会根据此字符串生成key 如果key参数为数组 APC会遍历整个数组 生成key 根据这些key APC会调用_apc_store将值存储到缓存中 由于这是用户缓存 当前使用的缓存为apc_user_cache 执行写入操作的是apc_cache_make_user_entry函数 其最终调用apc_cache_user_insert执行遍历查询和写入操作 与此对应 系统缓存使用apc_cache_insert执行写入操作 其最终都会调用_apc_cache_insert
不管是用户缓存还是系统缓存 大体的执行过程类似 步骤如下
通过求余操作 定位当前key的在slots数组中的位置 cache >slots[key h % cache >num_slots];
在定位到slots数组中的位置后 遍历当前key对应的slot链表 如果存在slot的key和要写入的key匹配或slot过期 清除当前slot
在最后一个slot的后面插入新的slot
APC模块安装
WINDOWS
第一步 下载php_apc dll 在//package/apc 要与php版本对应 将php_apc dll放入你的ext目录
第二步 让php ini支持apc扩展模块 然后打开php ini 加入
extension=php_apc dll
apc rfc = on
apc max_file_size = M
upload_max_filesize = M
post_max_size = M
//以上参数可自己定义
第三步 检查是否支持PHP APC apc_store apc_fetch PHP APC 配置参数 把相关的配置放在一起解释
apc enabled= apc enabled默认值是 你可设成 禁用APC 如果你设置为 的时候 同样把extension=apc so也注释掉(这样可以节约内存资源) 一旦启用了APC功能 则会缓存Opcodes到共享内存
apc shm_segments =
总结 使用Spinlocks锁机制 能够达到最佳性能
APC提供了apc php 用于监控与管理APC缓存 不要忘记修改管理员名和密码
APC默认通过mmap匿名映射创建共享内存 缓存对象都存放在这块 大型 的内存空间 由APC自行管理该共享内存
我们需要通过统计调整apc shm_size apc num_files_hints apc user_entries_hint的值 直到最佳
好吧 我承认apc stat = 可以获得更佳的性能 要我做什么都可以接受
PHP预定义常量 可以使用apc_define_constants()函数 不过据APC开发者介绍说pecl hidef性能更佳 抛异define吧 它是低效的
函数apc_store() 对于系统设置等PHP变量 生命周期是整个应用(从d守护进程直到d守护进程关闭) 使用APC比Memcached会更好 必竟不要经过网络传输协议tcp
APC不适于通过函数apc_store()缓存频繁变更的用户数据 会出现一些奇异现象
LIUNX
wget /get/APC tgz
tar zxvf APC tgz cd APC
/usr/local/php/bin/phpize
/configure enable apc enable mmap enable apc spinlocks disable apc pthreadmutex with php config=/usr/local/php/bin/php config
make
sudo make install
在/usr/local/php/etc/php ini 加入
extension = apc so ;
;APC setting
apc enabled =
apc shm_segments =
apc shm_size = M
apc optimization =
apc num_files_hint =
l =
apc gc_ttl =
apc cache_by_default = on
重启apache 或者 /usr/local/php/sbin/php fpm restart
查看phpinfo apc
下面引用框架的APC缓存类
initphp框架之APC缓存类
[php]
<?php
if (!defined( IS_INITPHP )) exit( Access Denied! )
/*********************************************************************************
* InitPHP 国产PHP开发框架 Dao APC缓存 不适合频繁写入的缓存数据
*
* 版权所有 CopyRight By
* 您可以自由使用该源码 但是在使用过程中 请保留作者信息 尊重他人劳动成果就是尊重自己
*
* $Author:zhuli
* $Dtime:
***********************************************************************************/
class apcInit
/**
* Apc缓存 设置缓存
* 设置缓存key value和缓存时间
* @param string $key KEY值
* @param string $value 值
* @param string $time 缓存时间
*/
public function set_cache($key $value $time = )
if ($time == ) $time = null; //null情况下永久缓存
return apc_store($key $value $time)
/**
* Apc缓存 获取缓存
* 通过KEY获取缓存数据
* @param string $key KEY值
*/
public function get_cache($key)
return apc_fetch($key)
/**
* Apc缓存 清除一个缓存
* 从memcache中删除一条缓存
* @param string $key KEY值
*/
public function clear($key)
return apc_delete($key)
/**
* Apc缓存 清空所有缓存
* 不建议使用该功能
* @return
*/
public function clear_all()
apc_clear_cache( user ) //清除用户缓存
return apc_clear_cache() //清楚缓存
/**
* 检查APC缓存是否存在
* @param string $key KEY值
*/
public function exists($key)
return apc_exists($key)
/**
* 字段自增 用于记数
* @param string $key KEY值
* @param int $step 新增的step值
*/
public function inc($key $step)
return apc_inc($key (int) $step)
/**
* 字段自减 用于记数
* @param string $key KEY值
* @param int $step 新增的step值
*/
public function dec($key $step)
return apc_dec($key (int) $step)
/**
* 返回APC缓存信息
*/
public function info()
return apc_cache_info()
cha138/Article/program/PHP/201311/20804
相关参考
PHPcdata处理(详细介绍) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!之前为项目赶进度用p
关于PHPsession存储方式的详细介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! PHP
深入Nginx+PHP缓存详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Nginx中的
通过缓存数据库结果提高PHP性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 众所周知缓存数据
本篇文章是对php设计模式中的单例与多例设计模式的应用进行了详细的分析介绍需要的朋友参考下 单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量如
《PHP设计模式介绍》第八章迭代器模式 类中的面向对象编程封装应用逻辑类就是实例化的对象每个单独的对象都有一个特定的身份和状态单独的对象是一种组织代码的有用方法但通常你会处理一组对象或者集合
本篇文章是对php中的curl选项列表进行了详细的分析介绍需要的朋友参考下 第一类对于下面的这些option的可选参数value应该被设置一个bool类型的值选项可选value值备注CU
在这里总结的许多编程惯用法都是很值得做为单独一个章节的甚至一本书的你应该把这章做为PHP模式设计使用惯用法的相关介绍而且查看一些列出的参考书来进行更深入的学习 测试你的代码 可能没有什么代码惯
JS清除IE浏览器缓存的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文为大家详细介绍下js
本篇文章是对计算php页面运行时间的函数进行了详细的分析介绍需要的朋友参考下 一个计算php页面运行时间的函数复制代码代码如下:cha138/Article/program/P