`
minbing
  • 浏览: 28045 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

php缓存----磁盘缓存

    博客分类:
  • php
阅读更多

PHP开发也有几个月了,感觉php缓存是很重要的一块,无论是页面级的(主要指smarty)还是dao级的。使用上还不怎么熟,但还是记录下笔记。本篇讲述的缓存是写到磁盘文件,这是看piwik源码时看到的,感觉思想很好,这也得益于PHP的var_export 方法。主要把要保存的内容(int,string,也可以使array)保存为php文件,这样当include这个php文件后,保存的内容就自动当做变量被include进来了。

 

源码如下:

<?php
class Piwik_CacheFile
{
    protected $cachePath;
    protected $cachePrefix;
    
    function __construct($directory)
    {
    	$this->cachePath = PIWIK_USER_PATH . '/tmp/cache/' . $directory . '/';
    }
    
	function get($id) 
	{
	    $cache_complete = false;
	    $content = '';
	
	    // We are assuming that most of the time cache will exists
	    $ok = @include($this->cachePath . $id . '.php');
	
	    if ($ok && $cache_complete == true) {
	        return $content;
	    }

	    return false;
	}
	
	function set($id, $content)
	{
		if( !is_dir($this->cachePath))
		{
			Piwik_Common::mkdir($this->cachePath);
		}
	    if (!is_writable($this->cachePath)) {
	        return false;
	    }
	
	    $id = $this->cachePath . $id . '.php';
	
	    $cache_literal  = "<"."?php\n\n";
	    $cache_literal .= "$"."content   = ".var_export($content, true).";\n\n";
	    $cache_literal .= "$"."cache_complete   = true;\n\n";
	    $cache_literal .= "?".">";
	
	    // Write cache to a temp file, then rename it, overwritng the old cache
	    // On *nix systems this should guarantee atomicity
	    $tmp_filename = tempnam($this->cachePath, 'tmp_');
	    if ($fp = @fopen($tmp_filename, 'wb')) {
	        @fwrite ($fp, $cache_literal, strlen($cache_literal));
	        @fclose ($fp);
	
	        if (!@rename($tmp_filename, $id)) {
	            // On some systems rename() doesn't overwrite destination
	            @unlink($id);
	            if (!@rename($tmp_filename, $id)) {
	                // Make sure that no temporary file is left over
	                // if the destination is not writable
	                @unlink($tmp_filename);
	            }
	        }
	        return true;
	    }
	    return false;
	}

    function delete($id)
    {
        $filename = $this->cachePath . $id . '.php';
        if (file_exists($filename)) {
            @unlink ($filename);
            return true;
        }
        return false;
    }
}
 
0
1
分享到:
评论

相关推荐

    PHP 缓存 PHP 缓存

    ### PHP 缓存详解 #### 一、缓存的基本概念 **缓存**是一种用于暂时存储数据的技术,目的是为了加快数据访问的速度。在现代软件开发中,缓存扮演着极其重要的角色,尤其对于提高Web应用的性能至关重要。通过缓存,...

    php运行时缓存ObjectCache

    - **减少资源消耗**:缓存数据存储在内存中,读取速度快于磁盘,减少了CPU和内存的消耗。 **5. 扩展和优化ObjectCache** 开发人员可以根据需求扩展和优化ObjectCache。例如,可以实现自定义缓存策略,如设置过期...

    php文件页面缓存类.zip

    5. **缓存清理**:提供一个方法来清理全部或部分缓存,以便释放磁盘空间或更新所有数据。 以下是一个简单的PHP文件缓存类的实现示例: ```php class FileCache { private $cacheDir = './cache/'; public ...

    简单高效的php文件缓存类.zip

    文件缓存的核心思想是将动态生成的内容保存到磁盘,当用户再次请求相同内容时,不再执行复杂的计算或查询过程,而是直接从缓存文件中读取。这种方式尤其适用于那些计算成本高、但内容相对静态的数据。 这个“简单...

    PHP缓存与静态化——PHP缓存与静态化

    在构建高性能的Web应用时,PHP缓存与静态化扮演着至关重要的角色。它们能够显著提升网站的响应速度,减少服务器资源的消耗,尤其对于高流量的动态网站来说更是如此。下面将详细探讨这两个概念以及如何在PHP中实现...

    php+redis服务器的缓存类

    PHP缓存通常包括文件缓存、APC(Alternative PHP Cache)、OpCache(PHP内置的opcode缓存)以及数据库缓存等。这里的PHP+Redis缓存类,就是通过Redis来实现这一目的。 2. **Redis缓存**:Redis是一个键值对存储系统...

    php中使用文件缓存类.zip

    - **缓存大小限制**:为了避免磁盘空间耗尽,可以设定总的缓存文件数量或大小上限,超出时自动清除最旧的缓存。 - **并发控制**:在多用户环境下,需要考虑并发读写文件的情况,可能需要使用锁机制避免数据竞争。 ...

    超简单的php缓存类.zip

    这个超简单的PHP缓存类主要关注的是文件缓存,这是一种将数据保存到服务器磁盘上的方式。相比于内存缓存,文件缓存的优势在于无需额外的服务器软件支持,但缺点是读写速度相对较慢。 类库下载的"超简单的php缓存类...

    php生成缓存文件php生成缓存文件

    - 提升响应速度:从磁盘读取缓存文件比执行动态脚本快。 - 并发处理:多个用户可以同时访问同一缓存数据,提高用户体验。 3. PHP生成缓存文件的步骤: - 决定缓存内容:确定哪些数据或结果值得缓存,通常包括...

    [示例][PHP]文件缓存的php类库.zip

    本示例中的“[示例][PHP]文件缓存的php类库.zip”是一个专门为PHP设计的文件缓存工具,旨在帮助开发者更有效地管理数据,降低对数据库的依赖,从而提高应用程序的性能。 文件缓存是将数据存储在本地文件系统中,...

    将响应缓存为磁盘上的静态文件以便快速进行页面加载

    "将响应缓存为磁盘上的静态文件以便快速进行页面加载"这一技术是提高网页加载速度的有效手段,尤其在PHP开发中,Laravel框架提供了一个名为"Laravel Page Cache"的工具,专门用于实现这个功能。Laravel Page Cache...

    THINKPHP缓存清理器

    3. **优化**:定期清理缓存可以释放磁盘空间,防止过量的缓存文件影响服务器性能。 4. **错误修复**:当应用出现异常,可能与缓存有关,清理缓存是一种有效的排查手段。 使用"RunTimeCleaner"这个工具,开发者可以...

    Stash一个PHP缓存库

    - **分层缓存**:Stash支持多级缓存,例如,可以先尝试从内存缓存获取数据,若未命中则再从更慢但容量更大的磁盘缓存查找。 - **缓存池**:可以创建多个独立的缓存池,每个池都有自己的策略和后端,适用于处理不同...

    php 超好用的文件缓存类

    文件缓存将数据保存在磁盘文件中,当需要读取数据时,它会快速打开相应的文件并读取内容。而写入操作则是将新数据写入文件。相比内存缓存,文件缓存的主要优势在于其持久性:即使服务器重启,数据也不会丢失。然而,...

    memcached缓存使用演示

    - Redis提供了持久化功能,可以将内存中的数据定期保存到磁盘,而Memcached不提供。 - Redis支持主从复制和集群,可扩展性更强,而Memcached扩展主要依赖于增加服务器节点。 ### 6. 缓存项目的最佳实践 - **缓存...

    虚拟磁盘-phpdisk

    - **缓存技术**:使用缓存机制,减少对服务器的直接请求,提高访问速度。 - **CDN服务**:结合内容分发网络(CDN),加快文件的分发速度,降低服务器压力。 总结,phpdisk作为一个基于PHP的虚拟磁盘服务,实现了...

    ThinkPHP文件缓存类.zip

    然而,文件缓存也有其局限性,比如在高并发环境下可能因磁盘I/O竞争导致性能瓶颈,这时可能需要考虑使用更高效的缓存方式,如Redis或Memcached。 总的来说,理解和熟练运用ThinkPHP的文件缓存类对于提升PHP应用的...

    PHP服务缓存加速优化实战.docx

    PHP FPM 进程调用 PHP 解析器读取站点磁盘上的 PHP 文件,并加载到内存中。 PHP 解析器将 PHP 程序编译成为 opcode 文件,然后把 opcode 缓存起来。 PHP FPM 引擎执行 opcode 树后,返回数据给 Nginx,进而返回...

Global site tag (gtag.js) - Google Analytics