加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.cn/)- AI行业应用、低代码、混合云存储、数据仓库、物联网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 部分缓存数据库返回数据的例子

发布时间:2022-07-04 09:55:31 所属栏目:PHP教程 来源:互联网
导读:php粉丝教程小编为各位介绍一篇php 部分缓存数据库返回数据的例子,这个例子其实是非常的实用了,希望能够帮助到大家. $cache = new FileCache(); $new_arr = $cache-get(gsmcache);//yourkey是你为每一个要缓存的数据定义的缓存名字 if ($new_arr===false) {
  php粉丝教程小编为各位介绍一篇php 部分缓存数据库返回数据的例子,这个例子其实是非常的实用了,希望能够帮助到大家.
 
  $cache = new FileCache();
  $new_arr = $cache->get('gsmcache');//yourkey是你为每一个要缓存的数据定义的缓存名字
  if ($new_arr===false) {
   
  $new_arr="数据库返回的数据";
   
  $cache->set('gsmcache',$new_arr,3600);//缓存3600秒
   
  }
   
  <?php
  /**
  * 文件缓存类
  *
  * @copyright blog.itiwin.cn
  * @author  More
  * @package cache
  * @version v0.1
  */
  class FileCache {
  /**
  * @var string $cachePath 缓存文件目录
  * @access public
  */
  public $cachePath = './';
   
  /**
  * 构造函数
  * @param string $path 缓存文件目录
  */
  function __construct($path = NULL) {
  if ($path) {
  $this->cachePath = $path;
  }
  }
   
  /**
  * 析构函数
  */
  function __destruct() {
  //nothing
  }
   
  /**
  * 在cache中设置键为$key的项的值,如果该项不存在,则新建一个项
  * @param string $key 键值
  * @param mix $var 值
  * @param int $expire 到期秒数
  * @param int $flag 标志位
  * @return bool 如果成功则返回 TRUE,失败则返回 FALSE。
  * @access public
  */
  public function set($key, $var, $expire = 36000, $flag = 0) {
  $value = serialize($var);
  $timeout = time() + $expire;
  $result = safe_file_put_contents($this->cachePath . urlencode($key) .'.cache',
  $timeout . '<<%-==-%>>' . $value);
  return $result;
  }
   
  /**
  * 在cache中获取键为$key的项的值
  * @param string $key 键值
  * @return string 如果该项不存在,则返回false
  * @access public
  */
  public function get($key) {
  $file = $this->cachePath . urlencode($key) .'.cache';
  if (file_exists($file)) {
  $content = safe_file_get_contents($file);
  if ($content===false) {
  return false;
  }
  $tmp = explode('<<%-==-%>>', $content);
  $timeout = $tmp[0];
  $value = $tmp[1];
  if (time()>$timeout) {
   
  $this->delete($key) ;//删除文件过期的
  $result = false;
  } else {
  $result = unserialize($value);
  }
  } else {
  $result = false;
  }
  return $result;
  }
   
  /**
  * 清空cache中所有项
  * @return 如果成功则返回 TRUE,失败则返回 FALSE。
  * @access public
  */
  public function flush() {
  $fileList = FileSystem::ls($this->cachePath,array(),'asc',true);
  return FileSystem::rm($fileList);
  }
   
  /**
  * 删除在cache中键为$key的项的值
  * @param string $key 键值
  * @return 如果成功则返回 TRUE,失败则返回 FALSE。
  * @access public
  */
  public function delete($key) {
  return FileSystem::rm($this->cachePath . $key .'.cache');
  }
  }
   
  if (!function_exists('safe_file_put_contents')) {
  function safe_file_put_contents($filename, $content)
  {
  $fp = fopen($filename, 'wb');
  if ($fp) {
  flock($fp, LOCK_EX);
  fwrite($fp, $content);
  flock($fp, LOCK_UN);
  fclose($fp);
  return true;
  } else {
  return false;
  }
  }
  }
   
  if (!function_exists('safe_file_get_contents')) {
  function safe_file_get_contents($filename)
  {
  $fp = fopen($filename, 'rb');
  if ($fp) {
  flock($fp, LOCK_SH);
  clearstatcache();
  $filesize = filesize($filename);
  if ($filesize > 0) {
  $data = fread($fp, $filesize);
  }
  flock($fp, LOCK_UN);
  fclose($fp);
  return $data;
  } else {
  return false;
  }
  }
  }
 

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读