首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 簡易數據緩存類實現:文件序列化存儲方案

     編輯:PHP 相關知識

PHP 簡易數據緩存類實現:文件序列化存儲方案

針對圖片較多的移動端頁面,通過文件緩存減少數據庫查詢壓力。本文提供一個輕量級緩存類,採用序列化數組寫入文件、讀取反序列化的機制,支持緩存過期時間控制與開關配置。

核心類代碼

<?php
/**
 * 簡易文件緩存類
 * 作者:fianl_m@foxmail.com
 */
class Cache {
    private $is_cache;    // 是否開啟緩存
    private $cache_file;  // 緩存目錄
    private $cache_time;  // 緩存有效期(秒)

    public function __construct($config) {
        $this->is_cache   = $config['is_cache'];
        $this->cache_file = $config['cache_file'];
        $this->cache_time = $config['cache_time'];
    }

    /** 讀取緩存 */
    public function open($name) {
        $filename = $this->cache_file . $name;
        // 文件存在且未過期且緩存開啟
        if ($this->is_cache && file_exists($filename) && (filemtime($filename) + $this->cache_time > time())) {
            $content = file_get_contents($filename);
            return unserialize($content);
        }
        return false;
    }

    /** 寫入緩存 */
    public function write($name, $data = array()) {
        $filename = $this->cache_file . $name;
        $content  = serialize($data);
        return file_put_contents($filename, $content);
    }
}

使用示例

// 配置
require('cache.class.php');
$config = array(
    'is_cache'   => 1,           // 開啟
    'cache_file' => './cache/',  // 緩存目錄(需可寫權限)
    'cache_time' => 60,          // 60 秒過期
);
$cache = new Cache($config);

// 讀取
$filename = 'article_list';
$row = $cache->open($filename);
if ($row === false) {
    // 緩存未命中:查詢數據庫
    $row = $db->query("SELECT * FROM articles")->fetchAll();
    // 寫入緩存
    $cache->write($filename, $row);
}

// 使用 $row 渲染頁面...

關鍵點解析

  • 序列化存儲:serialize()/unserialize() 保留數組結構與類型,適合 PHP 內部數據交換。
  • 過期判斷:filemtime() + $cache_time > time() 簡單高效,無需額外元數據文件。
  • 目錄權限:緩存目錄需 Web 服務器進程可寫(如 chmod 755 或 777)。
  • 併發風險:高併發下可能出現緩存擊穿或寫入衝突,生產環境建議引入鎖機制或升級為 Redis/Memcached。
  • 安全性:避免緩存敏感數據;定期清理過期文件防止磁盤佔滿。

擴展建議

  1. 增加 delete()、flush() 方法支持手動失效。
  2. 引入 json_encode/decode 替代序列化,提升跨語言兼容性與安全性。
  3. 實現緩存標籤/分組,支持批量失效相關緩存。
  4. 對接 PSR-6/PSR-16 標準接口,便於無縫切換緩存後端。

此類適合中小型項目快速接入文件緩存,大流量或分布式場景請直接使用專業緩存中間件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved