背景:

近期做一个后台管理系统时,想针对各项菜单做一个缓存,有三种备选方案:session,文件缓存,kv数据库。

1、排除session是因为如果用session就得解决菜单刷新问题,会导致管理员更改权限后 用户无法实时变更。

2、排除kv数据库是因为并不是所有服务器都有kv数据库,不通用

3、选择文件缓存是可以实现实时刷新,更新权限时重新生成文件即可

分享一个文件缓存类

<?php
namespace eoc\library;
class cache
{
    //缓存文件存放目录
    private $path = LOG_PATH.DIRECTORY_SEPARATOR.'cache';

    //创建目录的初始权限
    private $mode = 755;

    //是否设置递归模式
    private $recursive = true;
    public function __construct($cacheDir = '', $mode = 755, $recursive = true)
    {
        if ($cacheDir != '') {
            $this->path = $cacheDir;
        }
        $this->mode = $mode;
        $this->recursive = $recursive;
    }

    /**
     * 设置缓存
     **/
    public function setFileCache($cacheName, $data)
    {
        //检测是否有目录如果有则创建
        $this->makeCacheDir();
        $fp = fopen($this->setFilePath($cacheName),'a+b');
        fwrite($fp, print_r($data, true));
        fclose($fp);
    }

    /**
     * 读取缓存
     **/
    public function getFileCache($cacheName = '')
    {
        $filePath =$this->setFilePath($cacheName);
        if ($this->isFileExist($filePath)) {
            $result = file_get_contents($filePath);
            return $result;
        }
        return false;
    }

    /**
     * @param $cacheName
     * @return string 返回组装好的缓存路径
     */
    private function setFilePath($cacheName)
    {
        return $this->path.DIRECTORY_SEPARATOR.$cacheName;
    }
    /**
     * 检测文件是否存在
     * @param $fileUrl
     * @return bool
     */
    private function isFileExist($fileUrl)
    {
        $result = file_exists($fileUrl) ? true : false;
        return $result;
    }

    /**
     * 创建目录
     */
    private function makeCacheDir() {
        if (!is_dir($this->path) && file_exists($this->path)) {
            mkdir($this->path, $this->mode, $this->recursive);
        }
    }
}

使用方法

<?php
//实例化
$cacheChar = new cache();
 
//读取缓存
$cacheData = $cacheChar->getFileCache('缓存文件名.log');
$data = json_decode($cacheData,true);

//设置缓存
$cacheChar->setFileCache('缓存文件名.log', json_encode($this->data));

来源:https://www.php63.cc
以上为代码内容,欢迎大家提提建议,如果觉得代码写得还行请赞一个谢谢,欢迎提出更好的解决办法


时光
112 声望1 粉丝