请选择 进入手机版 | 继续访问电脑版
×
热搜词

QQ登录

只需一步,快速开始

非常简单的PHP缓存类

我最近在做一个自己的PHP框架,写这个PHP缓存类也是为了可以在框架中更方便的创建、读取缓存。

虽然一开始是为了在框架中使用而写的这个缓存类,不过在原生环境中也可以直接使用。
废话不多说,上代码:


./src/class_cache.php
[PHP] 纯文本查看 复制代码
<?php
namespace YaoGuang;


class cache{

    const EH = 3600;

    const ERROR_NOT_FOUND = "缓存文件不存在.";
    const ERROR_NOT_ARRAY = "传入的数据必须是数组.";

    public function __construct(){
        //检测是否存在缓存目录
        if(!file_exists("./cache/")){
            //创建缓存目录
            mkdir("./cache/");
        }
	}

    public function set_cache($cache_name , $cache_data , $cache_file = "data.json" , $cache_update_time = 120){
        if(!is_array($cache_data)){
            return Cache::ERROR_NOT_ARRAY;
        }
        //检测是否存在缓存目录
        if(!file_exists("./cache/".$cache_name."/")){
            //创建缓存目录及默认文件
            mkdir("./cache/".$cache_name);
        }
        $cache_config = array("cache_name"=>$cache_name,"cache_update_time"=>$cache_update_time);
        $cache_data["cache_regtime"] = time();
        
        if ( file_put_contents("./cache/".$cache_name."/config.json",json_encode($cache_config,JSON_UNESCAPED_UNICODE)) == false
        || file_put_contents("./cache/$cache_name/$cache_file",json_encode($cache_data,JSON_UNESCAPED_UNICODE)) == false ){
            return false;
        }
        return $cache_data;
	}

    public function cache_static_get_data($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if(!file_exists("./cache/".$cache_name."/".$cache_file)){
            return cache::ERROR_NOT_FOUND;
        }
        $cache_data_json = file_get_contents("./cache/".$cache_name."/".$cache_file);
        $cache_data = json_decode($cache_data_json , true);
        return $cache_data;
	}

    public function cache_is_overtime($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if(!file_exists("./cache/".$cache_name."/".$cache_file)){
            return cache::ERROR_NOT_FOUND;
        }
        $cache_config = $this->cache_static_get_data($cache_name , "config.json");
        $cache_data = $this->cache_static_get_data($cache_name , $cache_file);

        $time = time();
        $dvalue = $time-$cache_data["cache_regtime"];
        if($dvalue > $cache_config["cache_update_time"]){
            return true;
        }
        return false;
	}
}
?>


./index.php
[PHP] 纯文本查看 复制代码
<?php
    require_once "./src/class_cache.php";

    $obj = new YaoGuang\cache();
    // var_dump($obj->cache_get_data("test"));
    // var_dump($obj->set_cache("test",array("测试字段A"=>"测试字段值 a","测试字段B"=>"测试字段值 b")));
    // var_dump($obj->cache_is_overtime("test"));
?>


引用./src/calss_cache.php文件后,
请实例化命名空间中的cache()类后再进行操作。

使用以下类方法设置缓存,缓存数据请使用数组存储,建议使用索引数组。
set_cache( 缓存名 , 缓存数据(数组类型) , 缓存文件名(可选) , 缓存超时时间(以秒计时)(可选) )

使用以下类方法静态获取缓存,缓存数据包括缓存设置时间将会以数组形式返回,且在获取后不会刷新缓存注册时间。
cache_static_get_data( 缓存名 , 缓存文件名(可选) )

使用以下类方法查询缓存是否超时,超时返回true,未超时返回false。
cache_is_overtime( 缓存名 , 缓存文件名(可选) )

注意:缓存文件名参数若是不写的话,会自动使用data.json文件作为缓存。

度仙门网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与度仙门网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和度仙门网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、度仙门网管理员和版主有权不事先通知发贴者而删除本文

帖子地址: 

玄元一墨

写了 182 篇文章,拥有下品灵石 9544 枚,中品灵石 10960 枚,上品灵石 10003 枚,被 3 人关注

欢迎访问度仙门网!请在论坛右上角的个人设置中修改你的个性签名!
踩
回复

使用道具

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

182

主题

219

帖子

111万

积分

宗主

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
1119668
玄元一墨 发表于 2023-1-17 12:35:29 IP属地:湖北武汉
现在这个缓存类已经有点拉了,最新的摇光框架里的缓存类我直接发出来吧。
回复

使用道具 举报

182

主题

219

帖子

111万

积分

宗主

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
1119668
玄元一墨 发表于 2023-1-17 12:36:13 IP属地:湖北武汉

缓存类代码:

[PHP] 纯文本查看 复制代码
/**
 * 缓存类: 在某些场景下,如调用api、对数据库内某些常用的字段进行调用时可以使用缓存,免去多次调用.
 */
class cache
{

    const EH = 3600;

    const ERROR_NOT_FOUND = "错误: 缓存文件不存在.";

    /**
     * 构造方法: 检测是否存在缓存目录.
     */
    public function __construct(){
        if(!file_exists("./cache/")){
            mkdir("./cache/");
        }
	}

    /**
     * 成员方法: 设置缓存内容.
     * [String] $cache_name: 缓存集合名.
     * [Array] $cache_data: 缓存数据正文.
     * [String] $cache_file: 缓存数据存贮的文件名 (可选).
     * [Int] $cache_update_time: 缓存超时时间 (可选).
     */
    public function set_cache($cache_name , $cache_data , $cache_file = "data.json" , $cache_update_time = 120){
        //检测是否为数组
        if(!is_array($cache_data)){
            TpPrint::common_print(ErrorGroup::ERROR_NOT_ARRAY , "错误提示");
            return ErrorGroup::ERROR_NOT_ARRAY;
        }
        if(!file_exists("./cache/".$cache_name."/")){
            //创建缓存目录及默认文件
            mkdir("./cache/".$cache_name);
        }
        $cache_config = array("cache_name"=>$cache_name,"cache_update_time"=>$cache_update_time);
        $cache_data["cache_regtime"] = time();
        
        if ( file_put_contents("./cache/".$cache_name."/config.json",json_encode($cache_config,JSON_UNESCAPED_UNICODE)) == false
        || file_put_contents("./cache/$cache_name/$cache_file",json_encode($cache_data,JSON_UNESCAPED_UNICODE)) == false ){
            return false;
        }
        return $cache_data;
	}

    /**
     * 成员方法: 静态获取缓存数据.
     * [String] $cache_name: 缓存集合名.
     * [String] $cache_file: 缓存数据存贮的文件名 (可选).
     */
    public function cache_static_get_data($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if($this->cache_exists($cache_name , $cache_file) != true){
            TpPrint::common_print($this::ERROR_NOT_FOUND , "错误提示");
            return $this::ERROR_NOT_FOUND;
        }
        $cache_data_json = file_get_contents("./cache/".$cache_name."/".$cache_file);
        $cache_data = json_decode($cache_data_json , true);
        return $cache_data;
	}

    /**
     * 成员方法: 检测缓存数据是否超时.
     * [String] $cache_name: 缓存集合名.
     * [String] $cache_file: 缓存数据存贮的文件名 (可选).
     */
    public function cache_is_overtime($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if($this->cache_exists($cache_name , $cache_file) != true){
            TpPrint::common_print($this::ERROR_NOT_FOUND , "错误提示");
            return $this::ERROR_NOT_FOUND;
        }
        $cache_config = $this->cache_static_get_data($cache_name , "config.json");
        $cache_data = $this->cache_static_get_data($cache_name , $cache_file);

        $time = time();
        $dvalue = $time-$cache_data["cache_regtime"];
        if($dvalue > $cache_config["cache_update_time"]){
            return true;
        }
        return false;
	}
	
	/**
     * 成员方法: 检测缓存数据是否存在.
     * [String] $cache_name: 缓存集合名.
     * [String] $cache_file: 缓存数据存贮的文件名 (可选).
     */
    public function cache_exists($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if(file_exists("./cache/".$cache_name."/".$cache_file)){
            return true;
        }
        return false;
	}

    /**
     * 成员方法: 删除缓存
     * [String] $cache_name: 缓存集合名.
     * [String] $cache_file: 缓存数据存贮的文件名 (可选).
     */
    public function cache_delete($cache_name , $cache_file = "data.json"){
        //检测是否存在缓存
        if($this->cache_exists($cache_name , $cache_file)){
            if(unlink("$cache_name/$cache_file")){
                return true;
            }
            return false;
        }
        return $this::ERROR_NOT_FOUND;
	}
}

回复

使用道具 举报

182

主题

219

帖子

111万

积分

宗主

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
1119668
玄元一墨 发表于 2023-1-17 12:37:43 IP属地:湖北武汉
玄元一墨 发表于 2023-1-17 12:36
缓存类代码:

[mw_shl_code=php,true]/**

将最新的缓存类代码替换掉之前的./src/class_cache.php即可!
回复

使用道具 举报

Copyright © 2018-, Duxian studio.

返回顶部