背景:
近期做一个后台管理系统时,想针对各项菜单做一个缓存,有三种备选方案: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
以上为代码内容,欢迎大家提提建议,如果觉得代码写得还行请赞一个谢谢,欢迎提出更好的解决办法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。