芒果小站

  1. 全球最具业界良心的主机 - Linode

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - Linode

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - Linode

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
18

简单至极的 PHP 缓存类

php
作者 芒果/分类 代码/发布于 2012-02-08 21:28

网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个。废话不多说,直接看代码吧!

使用说明:

1、实例化

$cache = new Cache();

2、设置缓存时间和缓存目录

$cache = new Cache(60, '/any_other_path/');

第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置。
默认情况下,缓存时间是 3600 秒,缓存目录是 cache/

3、读取缓存

$value = $cache->get('data_key');

4、写入缓存

$value = $cache->put('data_key', 'data_value');

完整实例:

$cache = new Cache();

//从缓存从读取键值 $key 的数据
$values = $cache->get($key);

//如果没有缓存数据
if ($values == false) {
	//insert code here...
	//写入键值 $key 的数据
	$cache->put($key, $values);
} else {
	//insert code here...
}

Cache.class.php

<?php
class Cache {
	private $cache_path;//path for the cache
	private $cache_expire;//seconds that the cache expires

	//cache constructor, optional expiring time and cache path
	public function Cache($exp_time=3600,$path="cache/"){
		$this->cache_expire=$exp_time;
		$this->cache_path=$path;
	}

	//returns the filename for the cache
	private function fileName($key){
		return $this->cache_path.md5($key);
	}

	//creates new cache files with the given data, $key== name of the cache, data the info/values to store
	public function put($key, $data){
		$values = serialize($data);
		$filename = $this->fileName($key);
		$file = fopen($filename, 'w');
	    if ($file){//able to create the file
	        fwrite($file, $values);
	        fclose($file);
	    }
	    else return false;
	}

	//returns cache for the given key
	public function get($key){
		$filename = $this->fileName($key);
		if (!file_exists($filename) || !is_readable($filename)){//can't read the cache
			return false;
		}
		if ( time() < (filemtime($filename) + $this->cache_expire) ) {//cache for the key not expired
			$file = fopen($filename, "r");// read data file
	        if ($file){//able to open the file
	            $data = fread($file, filesize($filename));
	            fclose($file);
	            return unserialize($data);//return the values
	        }
	        else return false;
		}
		else return false;//was expired you need to create new
 	}
}
?>
版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/the-simple-php-cache-class/" title="简单至极的 PHP 缓存类" rel="bookmark">简单至极的 PHP 缓存类 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 18 条群众意见

  1. airoschou /2012-02-09 15:02

    很好,简单实用易理解! 回应

    #1
  2. yookcc /2012-02-10 13:55

    请问贵站logo用的是什么字体?谢谢 回应

    #2
  3. U盘数据恢复 /2012-02-10 15:22

    大道至简啊 精辟 回应

    #3
  4. 芒果yookcc/2012-02-10 22:13

    经典粗仿黑 回应

    #4
  5. tom /2012-02-13 20:22

    不行的,firefox直接阻止了! 回应

    #5
  6. 芒果tom/2012-02-14 11:14

    这个和浏览器怎么会有关系??? 回应

    #6
  7. 备案窝 /2012-03-01 14:57

    gg的大图广告太影响用户体验了。 回应

    #7
  8. PHOOK /2012-03-01 16:48

    简单实用啊 回应

    #8
  9. 游戏论坛 /2012-03-02 08:11

    不错的说,谢谢分享 回应

    #9
  10. Huntop Industries /2012-05-24 16:11

    这个Cache.class.php是否可以通过FLASHFXP上传,放在哪个位置?
    盼高手指教!谢谢! 回应

    #10
  11. 芒果cto /2012-07-24 11:20

    使用了,很方便 回应

    #11
  12. David /2012-08-30 17:14

    芒果,我网站是用 php 讀取數據輸出報價 (每分鐘更新一次) ,想使用 CDN 鏡像加速,CDN的人員說,最好是采用 php 緩存,但是我没有接觸過緩存技術,是否可以請你跟我聯係下,想請您幫忙 (可付費)

    謝謝 回应

    #12
  13. 芒果David/2012-08-30 17:56

    不是很明白你的需求,你可以详细描述下发到我的邮箱 回应

    #13
  14. ?
    小记博客重组织 /2012-10-13 21:58

    […] 对于主页的请求,先去看看cache过没过期,没过期就直接返回cache的结果,这样可以减少不少网络传输。其中,cache类我是参考这篇的。 […] 回应

    #14
  15. chiphen /2013-03-28 11:40

    很好 很简单的缓存类,但获取缓存过期时间好像只是3600秒??? 回应

    #15
  16. 衣衣小妖 /2013-04-24 15:49

    确实简单易懂 回应

    #16
  17. luobo /2013-07-05 15:58

    这个还是cache到磁盘中哦,对与一些高访问的简单查询,磁盘io的压力更大了吧,毕竟数据库的常用查询是缓存到内存中的。 回应

    #17
  18. 在线工具 /2014-11-28 16:48

    这个缓存类有一个问题就是缓存放到一个文件,即使只需要一个很小的数据, 也需要吧缓存文件独到内存中解析,性能上是有问题的!
    我自己也针对自己的需求写了一个:https://github.com/hustcc/php-file-cache 回应

    #18

下面我简单说几句