当前位置:首页 > PHP教程 > php高级应用 > 列表

linux下yum安装PHP APC与使用实例

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-27 15:25:15 浏览: 评论:0 

今天要做一个大文件上传进度效果,后来网上说有php apc可以实现,后来百度了一下php apc信息,PHP APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache,同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache,想用一下APC缓存到底效果如何,无奈在windows找不到相应版本的php-apc.dll扩展文件,只好在linux下安装了,不用源码方式安装,直接yum就行了.

首先要安装apc的依赖包,代码如下:

yum install php-pear php-devel httpd-devel pcre-devel gcc make

然后使用pecl安装apc,代码如下:pecl install apc

添加apc扩展到配置文件,代码如下:

echo "extension=apc.so" > /etc/php.d/apc.ini

最后记得重启服务器,代码如下:

service httpd restart 

然后用PHP的phpinfo()函数可以检测到.

APC缓存函数实例:在APC中我们也可以享受APC带来的缓存大文件上传进度的特性,需要在php.ini中将apc.rfc1867设为1,并且在表单中加一个隐藏域 APC_UPLOAD_PROGRESS,这个域的值可以随机生成一个hash,以确保唯一.

APC有很多设置,你可以在php.ini中对它设置,代码如下:

  1. [APC] 
  2. apc.enabled = 1 
  3. apc.shm_segments = 1 
  4. apc.shm_size = 64 
  5. apc.max_file_size = 10M 
  6. apc.stat=1 

我试用了下PHP中常见的APC函数,代码如下:

  1. <?php 
  2.  
  3. /*添加变量到数据存储 
  4. bool apc_add ( string $key , mixed $var [, int $ttl = 0 ] ) 
  5. 如果key存在了,不会覆盖,但返回false 
  6. */ 
  7. apc_add('url','http://www.phpfensi.com'); 
  8.  
  9. /*从缓存中取出存储的变量 
  10. mixed apc_fetch ( mixed $key [, bool &$success ] ) 
  11. */ 
  12. var_dump(apc_fetch('url')); 
  13.  
  14. /*使用 apc_store() 存储的变量,.key是唯一的,所以 两个值使用同一个名称,原来的将被新的值覆盖 
  15. bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] ) 
  16. */ 
  17. apc_store('var','新的变量'); 
  18.  
  19. /*从用户缓存中删除某个变量 
  20. mixed apc_delete ( string $key ) 
  21. */ 
  22. apc_delete('url'); 
  23.  
  24. /*清楚apc缓存 
  25. bool apc_clear_cache ([ string $cache_type ] ) 
  26. */ 
  27. apc_clear_cache('user'); 
  28.  
  29. /*检查APC中是否存在某个或者某些key,如果Key存在的话返回 TRUE , 否则返回 FALSE 
  30. mixed apc_exists ( mixed $keys ) 
  31. */ 
  32. if(apc_exsists('url')){ 
  33.  echo "这个key真存在"
  34. }else
  35.  echo "貌似这个key是不存在的"
  36.  
  37. /*递增一个储存的数字,成功时返回 key 的当前值, 或者在失败时返回 FALSE 
  38. int apc_inc ( string $key [, int $step = 1 [, bool &$success ]] ) 
  39. */ 
  40. apc_store('anumber', 42); 
  41. $ret = apc_inc('anumber', 1, $fail); 
  42. var_dump($ret); 
  43. var_dump($fail); 
  44.  
  45. /*递减一个存储变量的数字,成功时返回 key 的当前值, 或者在失败时返回 FALSE 
  46. int apc_dec ( string $key [, int $step = 1 [, bool &$success ]] ) 
  47. */ 
  48. $ret = apc_dec('astring', 1, $fail); 
  49. var_dump($ret); 
  50. var_dump($fail); 
  51. ?> 

另外提供一个很好用的APC缓存类,代码如下:

  1. <?php 
  2.  
  3. /********************************************************************************* 
  4.  * APC缓存类,版权(摘自InitPHP框架) 
  5. ***********************************************************************************/ 
  6. class MyApc { 
  7.  
  8.  /** 
  9.   * Apc缓存-设置缓存 
  10.   * 设置缓存key,value和缓存时间 
  11.   * @param  string $key   KEY值 
  12.   * @param  string $value 值 
  13.   * @param  string $time  缓存时间 
  14.   */ 
  15.  public function set_cache($key$value$time = 0) {  
  16.   if ($time == 0) $time = null; //null情况下永久缓存 
  17.   return apc_store($key$value$time);; 
  18.  } 
  19.  
  20.  
  21.  /** 
  22.   * Apc缓存-获取缓存 
  23.   * 通过KEY获取缓存数据 
  24.   * @param  string $key   KEY值 
  25.   */ 
  26.  public function get_cache($key) { 
  27.   return apc_fetch($key); 
  28.  } 
  29.  
  30.  /** 
  31.   * Apc缓存-清除一个缓存 
  32.   * 从memcache中删除一条缓存 
  33.   * @param  string $key   KEY值 
  34.   */ 
  35.  public function clear($key) { 
  36.   return apc_delete($key); 
  37.  } 
  38.  
  39.  /** 
  40.   * Apc缓存-清空所有缓存 
  41.   * 不建议使用该功能 
  42.   * @return 
  43.   */ 
  44.  public function clear_all() { 
  45.   apc_clear_cache('user'); //清除用户缓存 
  46.   return apc_clear_cache(); //清楚缓存 
  47.  } 
  48.  
  49.  /** 
  50.   * 检查APC缓存是否存在 
  51.   * @param  string $key   KEY值 
  52.   */ 
  53.  public function exists($key) { 
  54.   return apc_exists($key); 
  55.  } 
  56.  
  57.  /** 
  58.   * 字段自增-用于记数 
  59.   * @param string $key  KEY值 
  60.   * @param int    $step 新增的step值 
  61.   */ 
  62.  public function inc($key$step) { 
  63.   return apc_inc($key, (int) $step); 
  64.  } 
  65.  
  66.  /** 
  67.   * 字段自减-用于记数 
  68.   * @param string $key  KEY值 
  69.   * @param int    $step 新增的step值 
  70.   */ 
  71.  public function dec($key$step) { 
  72.   return apc_dec($key, (int) $step); 
  73.  } 
  74.  
  75.  /** 
  76.   * 返回APC缓存信息 
  77.   */ 
  78.  public function info() { 
  79.   return apc_cache_info(); 
  80.  } 
  81.  
  82. //使用方法如下: 
  83. $apc = new MyApc(); 
  84. $apc->set_cache('key','test by www.phpfensi.com'); 
  85. print_r($apc->get_cache('key')); 
  86. ?> 

总结:

1,使用Spinlocks锁机制,能够达到最佳性能。

2,APC提供了apc.php,用于监控与管理APC缓存。不要忘记修改管理员名和密码

3,APC默认通过mmap匿名映射创建共享内存,缓存对象都存放在这块”大型”的内存空间。由APC自行管理该共享内存

4,我们需要通过统计调整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到最佳

5,好吧,我承认apc.stat = 0 可以获得更佳的性能。要我做什么都可以接受.

6,PHP预定义常量,可以使用apc_define_constants()函数。不过据APC开发者介绍说pecl hidef性能更佳,抛异define吧,它是低效的。

7,函数apc_store(),对于系统设置等PHP变量,生命周期是整个应用(从httpd守护进程直到httpd守护进程关闭),使用APC比Memcached会更好。必竟不要经过网络传输协议tcp。

8,APC不适于通过函数apc_store()缓存频繁变更的用户数据,会出现一些奇异现象.

Tags: linux实例 yum安装 APC实例

分享到: